Wie man ein WPF-Gitter basierend auf einem zweidimensionalen Array auffüllt

Ich habe ein 2-dimensionales array von Objekten und ich wollen im Grunde databind jeweils zu einer Zelle in einer WPF-grid. Derzeit habe ich diese arbeiten, aber ich Tue die meisten es prozedural. Ich erstelle die richtige Anzahl von Zeilen-und Spaltendefinitionen, dann habe ich eine Schleife durch die Zellen und erstellen Sie die Steuerelemente und das einrichten der richtigen Bindungen für jeden.

Zumindest ich möchte in der Lage sein, um eine Vorlage zu verwenden, geben Sie die Kontrollen und Bindungen in xaml. Im Idealfall würde ich mag, um loszuwerden, der prozeduralen code und tun Sie es einfach alle mit databinding, aber ich bin mir nicht sicher, das ist möglich.

Hier ist der code den ich momentan verwende:

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);
        }
    }

}

InformationsquelleAutor der Frage Daniel Plaisted | 2008-11-10

Schreibe einen Kommentar