2010-03-19 64 views
1

因此,我對WPF很陌生,試圖將一系列Drink值綁定或分配給wpf樹視圖,但不知道如何去做,並且發現很難找到任何在線顯示的東西,而無需使用XAML。如何以編程方式將WPF TreeView綁定到列表<Drink>?

struct Drink 
{ 
    public string Name { get; private set; } 
    public int Popularity { get; private set; } 

    public Drink (string name, int popularity) 
     : this () 
    { 
     this.Name = name; 
     this.Popularity = popularity; 
    } 
} 

List<Drink> coldDrinks = new List<Drink> (){ 
    new Drink ("Water", 1), 
    new Drink ("Fanta", 2), 
    new Drink ("Sprite", 3), 
    new Drink ("Coke", 4), 
    new Drink ("Milk", 5) }; 
     } 
    } 

我該如何在代碼中做到這一點?例如:

treeview1.DataItems = coldDrinks; 

和一切都顯示在樹視圖中。

回答

2

您可以只設置:

treeView1.ItemsSource = coldDrinks; 

不過,我在這裏質疑使用一個TreeView的。你顯然顯示的是平坦的非分層數據,所以沒有理由使用TreeView。

爲什麼不直接使用ListView或ListBox?

+0

你說得對。我想從那開始,然後轉向分層數據:O。我想要做的另一件事是設置treeviewitem名稱drink.Name。你能告訴我,代碼中也是這樣嗎? – 2010-03-19 23:26:05

+0

在XAML中更容易 - 基本上,您需要設置一個DataTemplate。如果你真的需要一個代碼示例,我會問它作爲一個單獨的問題,因爲它太參與評論... – 2010-03-19 23:41:44

2

裏德說了什麼。 Plus:

您找不到編程示例的原因是這不適合在代碼中完成。正如裏德所說,你設置了ItemsSource屬性,但是這並不能提供你正在尋找的結果。在你的榜樣輸出將是:

MyApplication.Drink 
MyApplication.Drink 
MyApplication.Drink 
MyApplication.Drink 
MyApplication.Drink 

這是因爲默認項模板只顯示該項目的ToString()方法的結果。要獲得飲料的名稱,您需要指定一個自定義項目模板。這最好在XAML中完成。

<TreeView x:Name="treeView1"> 
     <TreeView.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Name}" /> 
      </DataTemplate> 
     </TreeView.ItemTemplate> 
    </TreeView> 

您可以創建模板並將其附加在代碼中,但比在XAML中執行該模板要花費更多的精力。

+0

謝謝,我只是覺得從winforms遷移時很難理解xaml。 – 2010-03-19 23:45:01

相關問題