ItemPanel模板中的统一网格

时间:2014-11-11 13:15:47

标签: c# wpf data-binding

说我有类似这样的代码

<ItemsControl ItemsSource="{Binding Blabla}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <UniformGrid Rows="8" Columns="8"></UniformGrid>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
           <ItemsControl.ItemTemplate>

<Data Template>
    <Button Command="{Binding blablaComamnd}"></Button>
</DataTemplate>

据我所知,uniformgrid将在一个包装面板中显示64个按钮,就像blalbla数据结构中对象的blabla命令一样。 无论如何要指定哪个项目进入网格中的哪个坐标? (理想情况下基于绑定到blabla对象中的某些数据)

非常感谢

1 个答案:

答案 0 :(得分:3)

如果您想指定哪个项目进入哪个单元格,则需要使用普通Grid并将ItemContainerStyle更改为ContentPresenter,这是ItemsControl的项目包装,将Grid.RowGrid.Column绑定到您的视图模型

<ItemsControl ItemsSource="{Binding Blabla}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                </Grid.RowDefinitions>
            </Grid>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Command="{Binding blablaComamnd}"></Button>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="{x:Type ContentPresenter}">
            <Setter Property="Grid.Column" Value="{Binding Column}"/>
            <Setter Property="Grid.Row" Value="{Binding Row}"/>
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>

其中ColumnRow是包含blablaComamnd的同一视图模型的属性