2011-07-27 103 views
1

我认为我的问题是相当基本的,但我找不到答案:
我有一个TreeView,我不知道如何监视节点的选择。我在处理程序中有TreeView.SelectedItemChangedTreeViewItem.Expanded的断点。当一个节点展开时,我确实看到TreeViewItem.Expanded处理程序正在工作,但是当点击一个节点时,这些事件都不会被触发。
我在做什么错?WPF TreeView - 选择和扩展节点

谢谢。

TreeView控件代码:

<TreeView Name="TestsTree" Height="Auto" MinHeight="50" ItemsSource="{Binding Path=TreeNodes, Mode=TwoWay}" TreeViewItem.Expanded="TestsTreeExpanded" TreeView.SelectedItemChanged="TestsTreeSelectedItemChanged"> 
     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate ItemsSource="{Binding Path=TreeNodes, Mode=TwoWay}" DataType="{x:Type TestExplorer:FolderTreeNode}"> 
       <TreeViewItem Header="{Binding Name}"/> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
     </TreeView> 

编辑:
我一直在使用TreeViewItem.Selected尝试,但它是相同的 - 当我在一个节点的名称点击没有反应,但是当我点击在扩展区域,TreeViewItem.SelectedTreeViewItem.Selected都被解雇。任何解释?

回答

3

你不应该把TreeViewItemDataTemplateTreeViewItemTreeView自动创建。 DataTemplate定义了TreeViewItem内容,而不是TreeViewItem本身。现在你有两个嵌套TreeViewItems,这可能是为什么它不能按预期工作。尝试改为:

 <HierarchicalDataTemplate ItemsSource="{Binding Path=TreeNodes, Mode=TwoWay}" DataType="{x:Type TestExplorer:FolderTreeNode}"> 
      <TextBlock Text="{Binding Name}"/> 
     </HierarchicalDataTemplate> 
+0

这解决了它!谢谢!我应该阅读更多关于模板的内容,我在一个网页中看到了这个用法,它解释了如何将一棵树绑定到ObservableCollection上,并认为它可以工作。 – Noich

1

尝试TreeViewItem.Selected事件而不是TreeView.SelectedItemChanged

+0

尝试过,请参阅编辑。谢谢! – Noich