SORU
10 Kasım 2008, PAZARTESİ


Nasıl bir WPF grid 2-boyutlu bir dizi dayalı doldurmak için

2 boyutlu nesneleri bir dizi var ve ben temelde bir WPF grid bir hücre, her bir databind etmek istiyorum. Şu anda bu ama en usulen yapıyorum çalışıyor. Satır ve sütun tanımları doğru sayıda oluşturmak, sonra ben yoluyla hücre döngüsü ve kontrolleri oluşturun ve her biri için doğru bağlantıları kurmak.

En azından xaml kontrolleri ve bağlantıları belirlemek için bir şablon kullanmak mümkün olmak istiyorum. İdeal yordam kodunu kurtulmak ve sadece tüm veri bağlama yapmak istiyorum, ama bu mümkün olduğundan emin değilim.

İşte şu anda ben kullanıyorum kodu:

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

}

CEVAP
10 Kasım 2008, PAZARTESİ


Kılavuzun amacı, gerçek veri bağlama için değil, sadece bir panel. İki boyutlu bir listesi görselleştirme gerçekleştirmek için en kolay yolu aşağıya ediyorum

<Window.Resources>
    <DataTemplate x:Key="DataTemplate_Level2">
            <Button Content="{Binding}" Height="40" Width="50" Margin="4,4,4,4"/>
    </DataTemplate>

    <DataTemplate x:Key="DataTemplate_Level1">
        <ItemsControl ItemsSource="{Binding}" ItemTemplate="{DynamicResource DataTemplate_Level2}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </DataTemplate>

</Window.Resources>
<Grid>
    <ItemsControl x:Name="lst" ItemTemplate="{DynamicResource DataTemplate_Level1}"/>
</Grid>

Ve kod arkasında TwoDimentional veri yapısı ile lst bu İtemsSource ayarlayın.

  public Window1()
    {
        List<List<int>> lsts = new List<List<int>>();

        for (int i = 0; i < 5; i  )
        {
            lsts.Add(new List<int>());

            for (int j = 0; j < 5; j  )
            {
                lsts[i].Add(i * 10   j);
            }
        }

        InitializeComponent();

        lst.ItemsSource = lsts;
    }

Bu çıkışı olarak aşağıdaki ekran veriyor. Bu DataTemplate_Level2 nesne hakkında daha kesin veri eklemek için düzenleyebilirsiniz.

alt text

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dellbear816

    Dellbear816

    4 Mart 2008
  • kylelandry

    kylelandry

    9 AĞUSTOS 2007
  • michellefeng's channel

    michellefeng

    26 Kasım 2006