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