WPF中的网格面板元素是否有数据窗口?

时间:2010-07-14 22:36:32

标签: c# wpf grid datatemplate

WPF相当新...

我想要绑定到网格面板的数据集合。每个对象都包含其网格行和列,以及填充在网格位置的内容。我真的很喜欢如何在列表框XAML中创建数据模板来创建一个几乎没有任何代码的UI。有没有办法为网格面板元素创建数据模板,并将面板绑定到数据集?

2 个答案:

答案 0 :(得分:13)

您可以使用ItemsControl作为其面板Grid。这是一个例子。 XAML:

    <ItemsControl x:Name="myItems">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                </Grid>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding MyText}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
        <ItemsControl.ItemContainerStyle>
            <Style>
                <Style.Setters>
                    <Setter Property="Grid.Row" Value="{Binding MyRow}" />
                    <Setter Property="Grid.Column" Value="{Binding MyColumn}" />
                </Style.Setters>
            </Style>
        </ItemsControl.ItemContainerStyle>
    </ItemsControl>

Codebehind(用于测试目的):

    public Window1()
    {
        InitializeComponent();
        myItems.ItemsSource = new[] {
            new {MyRow = 0, MyColumn = 0, MyText="top left"},
            new {MyRow = 1, MyColumn = 1, MyText="middle"},
            new {MyRow = 2, MyColumn = 2, MyText="bottom right"}
        };
    }

答案 1 :(得分:0)

不确定这是否对您有所帮助,但为什么不尝试将ItemsControl(ListBox,ListView)的ItemsPanel设置为UniformGrid。像这样:

<ItemsControl>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

它与之前的解决方案类似,只是更具动态性。