WPF:无法从SelectedItem获取TreeViewItem
本文关键字:SelectedItem 获取 TreeViewItem WPF | 更新日期: 2023-09-27 18:14:29
我使用HierarchicalDataTemplate来形成树。我正在做以下事情:1. 选择一个文件夹,点击"添加文件夹"按钮。2. 将显示所选文件夹下的新文件夹。ViewModel被正确更新,这样它在选定的Folder元素下有一个Folder,并且在TreeView中也更新了相同的内容。
我关心的是如何获得添加文件夹的TreeViewItem。我有对新添加的文件夹的参考,但不知道如何获得相同的TreeViewItem。下面是添加文件夹
的示例代码ElementFolder文件夹= ViewModel。AddFolder (selectedFolder NewFolder);
这里,文件夹是对添加的类型为ElementFolder的新文件夹的引用。HierarchicalDataTemplate的ItemsSource是ElementFolder。
请帮助。我被卡住了。我读了很多帖子,但没有一个能帮我。请帮忙!!我尝试了这个链接中提到的想法,但它没有帮助:如何从HierarchicalDataTemplate项目获得TreeViewItem ?
我是这样做的
- 设置TreeView的ItemsContainerStyle,以便在选择TreeViewItem时调用Handler。这可以通过EventSetter绑定实现,即为Selected事件设置一个处理程序。
- 为TreeViewItem的IsSelected属性绑定到IsFldrSelected属性。
注意:需要一个双向绑定 - 每当一个新的文件夹被添加到树(参考示例代码关于我如何添加文件夹),我有引用该文件夹。使用此参考,我将文件夹对象的IsFldrSelected属性设置为true。
- 在做这个IsSelected属性的新添加的TreeViewItem被设置为true。(基本上这将以编程方式选择TreeViewItem)。
- 这将触发Selected事件,然后调用它的处理程序,其中发送者将是我需要的选定的TreeViewItem。
注意:当你获得所需的TreeViewItem时,将RoutedEventArgs的Handled属性设置为true (e.Handled = true
),否则这个处理程序将被多次调用,直到到达树的根(这是由于冒泡事件),因此你将失去所需的TreeViewItem