如何基于二维数组填充WPF网格

我有一个二维的对象数组,我基本上希望将每个对象数据绑定到WPF网格中的一个单元格。目前,我有这项工作,但我做它的大部分程序。我创建正确数量的行和列定义,然后循环遍历单元格并创建控件,并为每个单元格设置正确的绑定

至少我希望能够使用一个模板来指定xaml中的控件和绑定。理想情况下,我希望摆脱过程代码,只需使用数据绑定即可,但我不确定这是否可行

以下是我当前使用的代码:

public void BindGrid()
{
m_Grid.Children.Clear();
m_Grid.ColumnDefinitions.Clear();
m_Grid.RowDefinitions.Clear();
对于(int x=0;x<MefGrid.Width;x++)
{
m_Grid.ColumnDefinitions.Add(new ColumnDefinition(){Width=new GridLength(1,GridUnitType.Star),});
}
对于(int y=0;y<MefGrid.Height;y++)
{
m_Grid.RowDefinitions.Add(new RowDefinition(){Height=new GridLength(1,GridUnitType.Star),});
}
对于(int x=0;x<MefGrid.Width;x++)
{
对于(int y=0;y<MefGrid.Height;y++)
{
Cell-Cell=(Cell)MefGrid[x,y];
SolidColorBrush笔刷=新的SolidColorBrush();
var绑定=新绑定(“On”);
binding.Converter=新的BoolColorConverter();
binding.Mode=BindingMode.OneWay;
BindingOperations.SetBinding(笔刷,SolidColorBrush.ColorProperty,绑定);
var rect=新矩形();
rect.DataContext=单元格;
矩形填充=刷子;
rect.SetValue(Grid.RowProperty,y);
rect.SetValue(Grid.ColumnProperty,x);
m_Grid.Children.Add(rect);
}
}
}

网格的用途不是用于真正的数据绑定,它只是一个面板。我列出了实现二维列表可视化的最简单方法

<窗口资源>
<DataTemplate x:Key=“DataTemplate\u Level2”>
<按钮内容=“{Binding}”Height=“40”Width=“50”Margin=“4,4,4”/gt;
&lt/数据模板>
<DataTemplate x:Key=“DataTemplate\u Level1”>
<ItemsControl ItemsSource=“{Binding}”ItemTemplate=“{DynamicResource DataTemplate_Level2}”>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel方向=“水平”/>
&lt/ItemsPanelTemplate>
&lt/ItemsControl.ItemsPanel>
&lt/项目控制>
&lt/数据模板>
&lt/窗口资源>
<网格>
<ItemsControl x:Name=“lst”ItemTemplate=“{DynamicSource DataTemplate_Level1}”/>
&lt/网格>

在代码隐藏中,使用二维数据结构设置lst的ItemsSource

公共窗口1()
{
List<List<int>lsts=新列表<List<int>();
对于(int i=0;i<5;i++)
{
添加(新列表<int>());
对于(int j=0;j<5;j++)
{
lsts[i].加(i*10+j);
}
}
初始化组件();
lst.ItemsSource=lsts;
}

这将为您提供以下屏幕作为输出。您可以编辑DataTemplate_Level2以添加对象的更具体数据

发表评论