WPF:无法从SelectedItem获取TreeViewItem

时间:2015-09-25 13:50:59

标签: c# wpf

我正在使用 HierarchicalDataTemplate 来构建树。我正在做以下事情: 1.选择一个文件夹,然后单击“添加文件夹”按钮。 2.应显示所选文件夹下的新文件夹。 ViewModel已正确更新,因此它在所选文件夹元素下有一个文件夹,并在TreeView中更新。

我担心的是如何获取添加的文件夹的 TreeViewItem 。我有对新添加的文件夹的引用,但不知道如何获取相同的TreeViewItem。下面是添加文件夹

的示例代码
  

ElementFolder文件夹= ViewModel.AddFolder(selectedFolder,“NewFolder”);
  这里,文件夹是对 ElementFolder 类型添加的新文件夹的引用。 HierarchicalDataTemplate 的ItemsSource是 ElementFolder

请帮忙。我被卡住了。 阅读很多帖子,但没有人来救我。请帮忙 !! 我尝试了此链接中提到的想法,但它没有帮助:How to get TreeViewItem from HierarchicalDataTemplate item?

1 个答案:

答案 0 :(得分:0)

以下是我如何运作

  1. 设置TreeView的 ItemsContainerStyle ,以便在选择TreeViewItem时调用Handler。这可以通过EventSetter绑定来实现,即为 Selected 事件设置处理程序。
  2. 为TreeViewItem的 IsSelected 属性创建绑定到我的ViewModel中创建的 IsFldrSelected 属性。
    注意:
  3. 需要 TwoWay 绑定
  4. 每当向树中添加一个新文件夹时(参考我如何添加文件夹的示例代码),我都会引用该文件夹。使用此参考我将文件夹对象的 IsFldrSelected 属性设置为 true
  5. 执行此操作时,新添加的TreeViewItem的 IsSelected 属性设置为true。 (基本上这将以编程方式选择TreeViewItem。)
  6. 这会触发 Selected 事件,而后者将调用它的处理程序,其中 sender 将是我需要的所选TreeViewItem。
  7. 注意:获得所需TreeViewItem的那一刻,将RoutedEventArgs的 Handled 属性设置为 true e.Handled = true),否则将多次调用此处理程序直到达到树的根(这是因为冒泡事件),因此你将丢失所需的TreeViewItem。