如何绑定一个' ObservableCollection '与行/列指定的对象网格
本文关键字:网格 对象 与行 ObservableCollection 一个 何绑定 绑定 | 更新日期: 2023-09-27 18:03:41
我在网格中有这样的内容:
<Ellipse Grid.Row="{Binding Path=Game.Tiles[2].Row}"
Grid.Column="{Binding Path=Game.Tiles[2].Column}"
Fill="{Binding Game.Tiles[2].FillColor}"
Stroke ="{StaticResource TileStroke}"></Ellipse>
我如何枚举所有24个对象而不输入这24次?
为了显示一个对象列表/集合,您需要使用一个"ItemsControl"。在这种情况下,下面的片段可能会有所帮助:
<ItemsControl ItemsSource="{Binding Game.Tiles}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Column" Value="{Binding Column}" />
<Setter Property="Grid.Row" Value="{Binding Row}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type local:Position}">
<Ellipse Fill="{Binding FillColor}"
Stroke="{StaticResource TileStroke}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
请记住为DataTemplate添加正确的DataType,并在Grid中添加足够的行/列来保存数据。
另外,包含未知数量的行/列也不那么容易。如果你感兴趣,我可以带着一个解决方案回来给你,但最初的帖子读起来像一个游戏棋盘的想法-像跳棋-所以我假设列/行的数量是恒定的。