Ich habe ein zweidimensionales Array von Objekten und ich möchte im Grunde jede einzelne zu einer Zelle in einem WPF-Gitter Databind. Zur Zeit habe ich diese Arbeit, aber ich mache das meiste prozedural. Ich erstelle die korrekte Anzahl von Zeilen- und Spaltendefinitionen, dann durchlaufe ich die Zellen und erstelle die Steuerelemente und richte die korrekten Bindungen für jedes ein.Wie man ein WPF-Gitter basierend auf einem 2-dimensionalen Array bevölkert
Zumindest möchte ich in der Lage sein, eine Vorlage zu verwenden, um die Steuerelemente und Bindungen in XAML anzugeben. Idealerweise möchte ich den prozeduralen Code loswerden und alles mit Datenbindung machen, aber ich bin mir nicht sicher, ob das möglich ist. Hier
ist der Code, den ich bin derzeit mit:
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);
}
}
}
ich nicht unbedingt ein Raster für die Datenbindung verwenden, aber ich will nicht zu haben, Erstellen Sie eine Liste mit Listen für die Quelle. Ich möchte ein Objekt mit einem Indexer verwenden, der zwei Parameter, x und y, enthält. –
WPF-Bindung kann ein Array nicht erkennen, es muss eine Enumerable-Auflistung sein. Also erstellen Sie eine List of List und erstellen Sie sie. –
Ist es möglich, das neue WPF DataGrid zu verwenden, um dies zu erreichen? –