2014-09-23 100 views
2

我目前正在WPF中編寫一個文件夾瀏覽器對話框。爲了顯示樹是我使用的TreeView:WPF TreeView項目不可選

<TreeView Name="FolderView" ItemsSource="{Binding DataTrees}" Grid.Row="0"> 
    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding Tree}"> 
     <TreeViewItem IsSelected="{Binding IsSelected, Mode=TwoWay}" IsExpanded="{Binding IsExpanded, Mode=TwoWay}" Header="{Binding Name}" HorizontalAlignment="Left"/> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
    </TreeView> 

目前我有三個問題:

  1. 你不能在運行PROGRAMM選擇一個項目
  2. 的標題是關於兩個選項卡右(不是關鍵的,但難看)
  3. 「IsExpanded」只設置當雙擊的項目,而不是在點擊[+]

我不知道問題出在哪裏,請評論,我會更新我的問題!

編輯: 的的ItemSource是一個列表 數據樹類:

public class DataTree:INotifyPropertyChanged 
{ 
    private string path; 

    private string name; 

    private ObservableCollection<DataTree> tree; 

    private bool isSelected; 

    private bool isExpanded; 
} 

(簡單的代碼 - 不Propertys和實施INotifyPropertyChanged的)

+0

在不瞭解內部結構的情況下修改'ItemTemplate'會導致很多問題。您應該使用Expression Blend來查看TreeViewItem的內部結構。 – 2014-09-23 09:18:10

回答

6

不要添加TreeViewItemItemTemplate直接:

<TreeView Name="FolderView" ItemsSource="{Binding DataTrees}" Grid.Row="0"> 
    <TreeView.ItemContainerStyle> 
     <Style TargetType="{x:Type TreeViewItem}">  
      <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/> 
      <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/> 
      <Setter Property="HorizontalAlignment" Value="Left"/> 
     </Style>  
    </TreeView.ItemContainerStyle> 

    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding Tree}"> 
      <TextBlock Text="{Binding Name}"/> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

如同任何ItemsControl,TreeView將其數據項目包裝到物料容器中(您的案例中爲TreeViewItem)。因此,應通過ItemContainerStyle來設置選擇和擴展等內容。

+0

我之前曾嘗試過,但由於數據上下文問題導致Setter Value Binding失敗。 「IsSelected」是TreeView的ItemSource中的項目的屬性,而不是ViewModel的屬性。 – Bio42 2014-09-23 09:37:30

+0

很明顯,您需要在「TreeViewItem」的數據上下文中使用「IsSelected」和「IsExpanded」。你的'ItemsSource'中有什麼樣的項目?那麼什麼是「ViewModel」? – Dennis 2014-09-23 10:02:00

+0

是的。 Itemsource是一個列表(我正在添加代碼)。 ViewModel是MVVM概念的ViewModel。 – Bio42 2014-09-23 10:49:25