如何在代码(C#和WPF)中以编程方式动态地更新列表框中包含更多行和列的网格

如何在代码(C#和WPF)中以编程方式动态地更新列表框中包含更多行和列的网格,c#,wpf,listbox,grid,dynamically-generated,C#,Wpf,Listbox,Grid,Dynamically Generated,我有一个列表框,其中每个项目都有一个数据模板来定义其结构。它最初有一个包含6行4列的网格。但在运行时,我想向特定的ListBoxItem添加更多的行和列到该DataTemplate中的网格中。我该怎么做?我是否需要创建一个新的DataTemplate,其中包含添加了行和列的网格?我已经看到了太多的例子,这些例子看起来像我想要实现的,但现在却被所有的绑定、ObservableCollections、ViewModel等等弄糊涂了。我该怎么办?下面是该特定列表框的WPF代码: <Lis

我有一个列表框,其中每个项目都有一个数据模板来定义其结构。它最初有一个包含6行4列的网格。但在运行时,我想向特定的ListBoxItem添加更多的行和列到该DataTemplate中的网格中。我该怎么做?我是否需要创建一个新的DataTemplate,其中包含添加了行和列的网格?我已经看到了太多的例子,这些例子看起来像我想要实现的,但现在却被所有的绑定、ObservableCollections、ViewModel等等弄糊涂了。我该怎么办?下面是该特定列表框的WPF代码:

    <ListBox Margin="0,138,28.58,156" Name="list" HorizontalAlignment="Right" Width="387.235" SelectionChanged="list_SelectionChanged">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>

                </Grid>

            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

实际上还有另一个op在问类似的问题。你可以看看他的问题。他的问题实际上就是你的答案

他使用从网格派生的自定义控件,并将其称为Board。此外,他还在运行时添加行和列,这似乎正是您想要实现的

以下是链接:

是的,这确实有效,我删除了DataTemplate和ItemTemplate标记,并创建了一个ListBoxItem,通过分配其内容,它将包含一个已创建的网格:ListBoxItem lbItem=new ListBoxItem();lbItem.Content=myGrid;此.list.Items.Add(lbItem);此ListBoxItem包含网格myGrid,此myGrid现在包含多个行和列上的数据。然后如何访问该网格并更新特定行和列上的数据?是否还可以使用DataTemplate选择器来确定ListBoxItem的动态内容?我注意到,在ListBox中包含特定网格结构的ListBoxItem不能添加到另一个ListBox中,而是接收到XamlParseException。也许我会编写自己的复制函数?好吧,它使用VisualTreeHelper创建ListBoxItem的动态网格。现在,我已经以编程方式在每个项目中插入了一个按钮,并且一个特定的按钮旨在根据按钮按下的特定项目显示更多信息。在事件处理程序中按下按钮时,如何将按钮与项目绑定?我对按钮的另一个想法是,当一个项目没有被选中时,它将不会被启用。但当选择一个项目时,按钮将被启用。我是否可以使用VisualTreeHelper来访问按钮并更改其状态?我也解决了这个问题,同样是使用VisualTreeHelper,但通过找到按钮的父级,该父级由按钮单击事件中的参数发送者表示。然后,我可以获得按钮所属的listboxitem并执行所需的操作。