如何绑定一个' 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次?

如何绑定一个' ObservableCollection '与行/列指定的对象网格

为了显示一个对象列表/集合,您需要使用一个"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中添加足够的行/列来保存数据。

另外,包含未知数量的行/列也不那么容易。如果你感兴趣,我可以带着一个解决方案回来给你,但最初的帖子读起来像一个游戏棋盘的想法-像跳棋-所以我假设列/行的数量是恒定的。