J'ai un tableau bidimensionnel d'objets et je souhaite fondamentalement indexer chacun d'eux sur une cellule dans une grille WPF. Actuellement, j'ai ce travail, mais je fais la plupart de la procédure. Je crée le nombre correct de définitions de lignes et de colonnes, puis je parcourt les cellules et crée les contrôles et configure les liaisons correctes pour chacun d'eux. Au minimum, j'aimerais pouvoir utiliser un modèle pour spécifier les contrôles et les liaisons dans xaml. Idéalement, je voudrais me débarrasser du code de procédure et tout faire avec la liaison de données, mais je ne suis pas sûr que ce soit possible.Comment remplir une grille WPF basée sur un tableau bidimensionnel
Voici le code que je suis actuellement en utilisant:
public void BindGrid()
{
m_Grid.Children.Clear();
m_Grid.ColumnDefinitions.Clear();
m_Grid.RowDefinitions.Clear();
for (int x = 0; x < MefGrid.Width; x++)
{
m_Grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star), });
}
for (int y = 0; y < MefGrid.Height; y++)
{
m_Grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Star), });
}
for (int x = 0; x < MefGrid.Width; x++)
{
for (int y = 0; y < MefGrid.Height; y++)
{
Cell cell = (Cell)MefGrid[x, y];
SolidColorBrush brush = new SolidColorBrush();
var binding = new Binding("On");
binding.Converter = new BoolColorConverter();
binding.Mode = BindingMode.OneWay;
BindingOperations.SetBinding(brush, SolidColorBrush.ColorProperty, binding);
var rect = new Rectangle();
rect.DataContext = cell;
rect.Fill = brush;
rect.SetValue(Grid.RowProperty, y);
rect.SetValue(Grid.ColumnProperty, x);
m_Grid.Children.Add(rect);
}
}
}
Je ne dois pas nécessairement d'utiliser une grille pour la liaison de données, mais je ne veux pas avoir à créer une liste de listes pour la source. Je veux utiliser un objet qui a un indexeur qui prend deux paramètres, x et y. –
La liaison WPF ne peut pas recongniser un tableau, il doit s'agir d'une collection Enumerable. Donc, mieux créer une liste de liste et de la databind. –
Est-il possible d'utiliser le nouveau DataGrid WPF pour y parvenir? –