这是我的相关帖子中的一些上下文: How to databind using to a 2d array of objects of different types
所以我有一个:
List<List<FarmyardSpace>>
我希望将其表示为网格单元格中的按钮。我不能像在相关帖子中那样使用 UniformGrid,因为我需要定义网格中单元格的大小。理想情况下,我不想在我的数据中定义 Row 和 Column 字段(尽管也许这应该由 ViewModel 以某种方式处理?前几天刚开始学习这些东西,但我仍然在 WPF 和 MVVM 上纠结) .
这是我最新的尝试,它不起作用(实际上引发了异常),在这个特定的示例中,我依赖于 FarmyardSpaces 上存在的 Column 和 Row 属性:
<ItemsControl ItemsSource="{Binding FarmyardGrid}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding}">
<ItemsPanelTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="15"/>
<RowDefinition />
<RowDefinition Height="15"/>
<RowDefinition />
<RowDefinition Height="15"/>
<RowDefinition />
<RowDefinition Height="15"/>
</Grid.RowDefinitions>
</Grid>
</ItemsPanelTemplate>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Grid.Row" Value="{Binding Row}"/>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="15"/>
<ColumnDefinition />
<ColumnDefinition Width="15"/>
<ColumnDefinition />
<ColumnDefinition Width="15"/>
<ColumnDefinition />
<ColumnDefinition Width="15"/>
<ColumnDefinition />
<ColumnDefinition Width="15"/>
<ColumnDefinition />
<ColumnDefinition Width="15"/>
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Grid.Column" Value="{Binding Column}"/>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
我认为这不起作用的部分原因是外部 ItemsControl 包含的项目不是 FarmyardSpaces 而是 List,因此它们没有要绑定的 Column 属性。我还尝试使用内部 ItemsControl 中的 RowDefinitions 和 ColumnDefinitions。这消除了异常,但也不起作用,对我来说似乎是错误的,特别是考虑到在相关帖子中使用 UniformGrid 时有效的解决方案,其中列在外部 ItemsControl 中声明。
无论如何,我将不胜感激任何帮助解决这个问题,在此先感谢!