J'ai un tableau à deux dimensions d'objets et je veux essentiellement lier chaque objet à une cellule dans une grille WPF. Actuellement, j'ai réussi à le faire, mais je le fais principalement de manière procédurale. Je crée le bon nombre de définitions de ligne et de colonne, puis je parcours les cellules et je crée les contrôles et je configure les liaisons correctes pour chacun.
À tout le moins, je voudrais pouvoir utiliser un modèle pour spécifier les contrôles et les liaisons en xaml. Idéalement, je voudrais me débarrasser du code procédural et tout faire avec la liaison de données, mais je ne suis pas sûr que cela soit possible.
Voici le code que j'utilise actuellement:
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);
}
}
}