在WPF
回答
最簡單的方法是使用綁定和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>
現在你只需要到TreeView
的ItemsSource
綁定到你的頂級項目集合,樹節點將自動構建。如果您需要添加(或刪除)一個節點,只需將一個項目添加到(或從中刪除)
對於此示例,我使用了單個項目類型,但是如果您有幾種類型要顯示該TreeView
您需要定義每個HierarchicalDataTemplate
。對於葉節點(沒有子節點的節點),您可以只使用常規DataTemplate
這個例子可能是你需要的東西: http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx
哇...不知道這可能是這麼簡單的東西太複雜...... – 2009-09-24 20:18:55
我意識到這是4歲但值得一提的是......阿門對此。整個網絡的WPF教程非常複雜。我越走越遠看到,我不認爲有一半的人在寫教程真的知道他們在做什麼。在WPF事情沒有那麼複雜... – TheFuzzyGiggler 2012-06-26 23:05:23
也許你的問題有點晚了,但有人遇到同樣的問題。 我發現WPF一個非常好的自由控制:DW.WPFToolkit 有了一個良好的文檔..
如果你忽略的事實,我不申報的數據類型和頭似乎並不存在,我能使其與更多不同的工作對象然後是一種類型。顯示的日期有相同的屬性名稱,所以它的工作。 它可能不是最好的辦法,但由於顯示器具有簡單,我會做這樣的現在。 – 2009-09-24 20:27:23
事實上,在我的代碼中有一個錯誤,Header屬性不存在......現在已經修復 – 2009-09-24 20:34:13