2011-07-27 115 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