我有一个二维的对象数组,我基本上希望将每个对象数据绑定到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;
</数据模板>;
<;DataTemplate x:Key=“DataTemplate\u Level1”>;
<;ItemsControl ItemsSource=“{Binding}”ItemTemplate=“{DynamicResource DataTemplate_Level2}”>;
<;ItemsControl.ItemsPanel>;
<;ItemsPanelTemplate>;
<;StackPanel方向=“水平”/>;
</ItemsPanelTemplate>;
</ItemsControl.ItemsPanel>;
</项目控制>;
</数据模板>;
</窗口资源>;
<;网格>;
<;ItemsControl x:Name=“lst”ItemTemplate=“{DynamicSource DataTemplate_Level1}”/>;
</网格>;
在代码隐藏中,使用二维数据结构设置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以添加对象的更具体数据