在WPF

2009-09-24 34 views
0

建立一個TreeView我試圖建立在WPF三級樹狀。基本上,我有一個頂級項目的列表,都有一個子項目。那些孩子物品可能有或沒有自己的項目。在WPF

任何人都知道在網絡上提供的教程嗎?

回答

4

最簡單的方法是使用綁定和HierarchicalDataTemplate。聲明一個類與您的數據:

class Item : INotifyPropertyChanged 
{ 
    public Item() 
    { 
     this.Children = new ObservableCollection<Item>(); 
    } 

    public event PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    private string _name; 
    public string Name 
    { 
     get { return _name; } 
     set 
     { 
      _name = value; 
      OnPropertyChanged("Name"); 
     } 
    } 

    public ObservableCollection<Item> Children { get; private set; } 
} 

,並定義一個HierarchicalDataTemplate此類型:

<HierarchicalDataTemplate DataType="{x:Type my:Item}" 
          ItemsSource="{Binding Items}"> 
    <TextBlock Text="{Binding Name}"/> 
</HierarchicalDataTemplate> 

現在你只需要到TreeViewItemsSource綁定到你的頂級項目集合,樹節點將自動構建。如果您需要添加(或刪除)一個節點,只需將一個項目添加到(或從中刪除)

對於此示例,我使用了單個項目類型,但是如果您有幾種類型要顯示該TreeView您需要定義每個HierarchicalDataTemplate。對於葉節點(沒有子節點的節點),您可以只使用常規DataTemplate

+0

如果你忽略的事實,我不申報的數據類型和頭似乎並不存在,我能使其與更多不同的工作對象然後是一種類型。顯示的日期有相同的屬性名稱,所以它的工作。 它可能不是最好的辦法,但由於顯示器具有簡單,我會做這樣的現在。 – 2009-09-24 20:27:23

+0

事實上,在我的代碼中有一個錯誤,Header屬性不存在......現在已經修復 – 2009-09-24 20:34:13

2

這個例子可能是你需要的東西: http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

+0

哇...不知道這可能是這麼簡單的東西太複雜...... – 2009-09-24 20:18:55

+0

我意識到這是4歲但值得一提的是......阿門對此。整個網絡的WPF教程非常複雜。我越走越遠看到,我不認爲有一半的人在寫教程真的知道他們在做什麼。在WPF事情沒有那麼複雜... – TheFuzzyGiggler 2012-06-26 23:05:23

0

也許你的問題有點晚了,但有人遇到同樣的問題。 我發現WPF一個非常好的自由控制:DW.WPFToolkit 有了一個良好的文檔..