【问题标题】:WPF: Not able to get TreeViewItem from the SelectedItemWPF:无法从 SelectedItem 获取 TreeViewItem
【发布时间】:2015-12-23 09:04:21
【问题描述】:

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

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

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

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

【问题讨论】:

  • 在将文件夹添加到 ViewModel 时,TreeView 上的 TreeVieweItem.Selected 事件是否不会被触发?
  • @Paul - 否。将新文件夹添加到模型时不会触发“Selected”事件(进而将新的 TreeViewItem 添加到模型中)。但是,我已经找到了我的问题的答案。请参阅下面的答案。

标签: c# wpf


【解决方案1】:

这是我的工作方式

  1. 设置 TreeView 的 ItemsContainerStyle 以便在选择 TreeViewItem 时调用处理程序。这可以通过 EventSetter 绑定来实现,即为 Selected 事件设置处理程序。
  2. 为 TreeViewItem 的 IsSelected 属性创建绑定到在我的 ViewModel 中创建的 IsFldrSelected 属性。
    注意:需要 TwoWay 绑定这个
  3. 每当向树中添加新文件夹时(请参阅有关如何添加文件夹的示例代码),我都会引用该文件夹。使用此引用,我将 folder 对象的 IsFldrSelected 属性设置为 true
  4. 执行此操作后,新添加的 TreeViewItem 的 IsSelected 属性设置为 true。 (基本上这将以编程方式选择 TreeViewItem)。
  5. 这将触发 Selected 事件,该事件又会调用它的处理程序,其中 sender 将是我需要的选定 TreeViewItem。

注意:获得所需 TreeViewItem 的那一刻,请将 RoutedEventArgs 的 Handled 属性设置为 true (e.Handled = true) 否则此处理程序将被多次调用,直到到达树的根部(这是因为冒泡事件),因此您将丢失所需的 TreeViewItem。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 2016-09-06
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    相关资源
    最近更新 更多