DataTemplate中的父子项
本文关键字:父子 DataTemplate | 更新日期: 2023-09-27 18:20:46
在我的主窗口中,我有一个ListBox
,它的ItemsSource
绑定到Layout
POCO对象的ObservableCollection
:
<ListBox x:Name="ListBox" ItemsSource="{Binding Layouts}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
此外,在MainWindow中,我们使用UserControl
(LayoutUserControl):定义Layout对象的视觉表示
<DataTemplate DataType="{x:Type local:Layout}">
<local:LayoutUserControl />
</DataTemplate>
当我们将对象添加到Layouts集合时,我们会看到新的LayoutUserControls填充ListBox。这是非常直接的。
现在,我想做的是以某种方式从MainWindow到各个LayoutUserControls进行通信。具体来说,在MainWindow中,我想在每个LayoutUserControls上调用一个方法。。。如果我尝试遍历ListBox的Items集合,我得到的只是对Layout对象的引用,而不是LayoutUserControls。由于LayoutUserControls是在DataTemplate中定义的,所以我没有访问它们的命名引用。。。
是否有一个WPF构造支持从父控件到子控件的这种类型的交互?RoutedEvents是我的第一个想法,但它们只支持孩子对父母(bubble)的通信。也许命令是前进的道路?
如有任何帮助,我们将不胜感激。
谢谢!
是的,有一个方法永远不应该使用,它就是ItemContainerGenerator
。
正如你自己所指出的,你应该以不同的方式建立沟通,命令听起来很合理。在Layout
上公开一个命令并将UserControl
绑定到它。或者创建一个事件并使UserControl
订阅它,然后就可以引发它。
在Silverlight中,有一个名为GetItemsAndContainers的扩展,正如这个SO问题中所描述的那样,它可以做到这一点,但我在WPF中找不到等效的扩展。
但是,如"如何访问WPF ListView的ListViewItems?通过使用VisualTreeHelper获取ListBox内部的LayoutUserControls。