如何在WPF中动态创建网格?

如何在WPF中动态创建网格?,wpf,Wpf,我想动态创建一个网格,以像任何电子商务站点一样显示产品信息 我正在从JSON获取产品信息,然后希望将每个产品的详细信息显示到类似平铺的视图中。我的建议是使用ItemsControl和WrapPanel <ItemsControl ItemsSource="{Binding Products}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPane

我想动态创建一个
网格
,以像任何电子商务站点一样显示产品信息


我正在从JSON获取产品信息,然后希望将每个产品的详细信息显示到类似平铺的视图中。

我的建议是使用
ItemsControl
WrapPanel

<ItemsControl ItemsSource="{Binding Products}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel IsItemsHost="True" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <!-- Your item template -->
            <Grid Height="120" Width="70">
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                    <RowDefinition Height="3*" />
                    <RowDefinition Height="2*" />
                </Grid.RowDefinitions>

                <TextBlock Grid.Row="0" FontWeight="Bold" Text="{Binding ProductName}" />
                <Image Grid.Row="1" Source="{Binding Thumbnail}" />
                <TextBlock Grid.Row="2" Text="{Binding Description}" />
            </Grid>
            <!-- Your item template -->
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Products
将是DataContext(如果使用MVVM,则为ViewModel)中项目的集合,您只需绑定到项目模板中这些项目的属性(如
ProductName
Thumbnail
Description

优点:

  • 更少的代码
  • 100%XAML
  • 使自身适应可用空间
  • 可以轻松配置为水平或垂直、从左到右或从右到左布局
缺点:

  • 没有选择
  • 无标题
  • 没有可编辑的模板
  • 嗯,这不是一个网格

如果你想要所有的功能,如标题、选择等,你必须使用类似DataGrid的东西,但是你会失去平铺布局。

DataGrid?或者一个包含产品详细信息的对象,正确地放置在网格中?我想为每个产品创建一个新对象,或者有什么方法可以从JSON数据源填充datagrid?我不太清楚您想要的布局是什么。你能不能画一个简单的模型来进一步描述?您还可以澄清您是否需要选择行为、列标题或编辑模板吗?如果您不需要这些功能的全部或部分,则使用带有自定义模板的备用控件可能是更好的解决方案。我还建议使用ItemsControl,但应注意,它不支持与DataGrid相同的功能,例如选择行为、列标题、编辑模板等。如果不需要这些功能,我肯定会使用ItemsControl是的,你说得对。但是OP要求的是一个
网格
,因为他也提到了“电子商务网站”,我猜他只是想以平铺布局显示项目。不过,我会在我的答案中添加这些缺点:P