Mam dwuwymiarową tablicę obiektów i zasadniczo chcę databind każdego z nich do komórki w siatce WPF. Obecnie mam to działa, ale robię większość z nich proceduralnie. Tworzę poprawną liczbę definicji wierszy i kolumn, a następnie przechodzę przez komórki i tworzę kontrolki oraz ustalam poprawne powiązania dla każdego z nich.Jak wypełnić siatkę WPF opartą na dwuwymiarowej tablicy
Co najmniej chciałbym móc użyć szablonu do określenia kontroli i powiązań w Xaml. Idealnie chciałbym pozbyć się kodu proceduralnego i po prostu zrobić to wszystko z wiązaniem danych, ale nie jestem pewien, czy to możliwe.
Oto kod Obecnie używam:
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);
}
}
}
Nie koniecznie trzeba użyć siatki do wiązania z danymi, ale nie chcę mieć do utwórz listę list dla źródła. Chcę użyć obiektu, który ma indeksator, który pobiera dwa parametry, x i y. –
Wiązanie wiązania WPF może recharongnize tablicy, musi to być kolekcja Enumerable. Więc lepiej stwórz listę list i określ ją. –
Czy można to wykorzystać w nowym DataGrid WPF? –