2010-03-20 55 views
1

我不知道如何將飲料列表綁定到WPF TreeView。如何使用Xaml將列表綁定到WPF樹視圖?

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) }; 
     } 
    } 

我已經在網上搜了,比如鋸了here。但是,這是什麼意思,甚至:ItemsSource="{x:Static local:TreeTest.BoatList}"

x:? static? local? 

你如何在XAML代碼中指定的集合?

+0

您的數據不是分層的。你真的想使用TreeView嗎?這種情況沒有多大意義。我認爲,在'popular'上設置排序的'ListBox'或'ListView'會更有意義。 – 2010-03-20 01:21:07

+0

謝謝,你是對的,但我開始很簡單,因爲我不知道wpf,但後來實際上會用分層結構替換數據。 – 2010-03-20 01:22:55

+0

@Benny:這個問題也引發了這個問題:http://stackoverflow.com/questions/2481010/how-to-bind-wpf-treeview-to-a-listdrink-programmatically – 2010-03-20 01:24:30

回答

4

通常,您需要確保爲UserControl或Window設置DataContext,然後讓您的「coldDrinks」成爲定義爲DataContext類中屬性的集合。

如果你這樣做,那麼所有的需要將是:

<TreeView ItemsSource="{Binding ColdDrinks}" /> 

我強烈建議在WPF's Data Binding model讀了。充分理解這一點是讓WPF真正令人愉快的關鍵之一。


在一個側面說明:給你最近的問題,你似乎都採取了這種方法,你可能需要考慮採取一些時間來對MVVM讀了,和其他建築方案。即使你不使用MVVM,描述它的文章可能會幫助你在WPF術語中「思考」,這將有助於巨大的幫助。

我寫了一個關於從Windows Forms style programming to WPF遷移的整個系列。它討論了特定的WPF功能,以及爲什麼你應該改變你的想法,但是介紹一些概念比大多數純粹的「MVVM」文章慢一點。如果有幫助,我會提及它。

+0

謝謝,你如何做你提到的第一件事? 「通常情況下,你需要確保......」。我必須這樣做嗎? – 2010-03-20 01:20:40

+0

我的coldDrinks在Window1內部是一個實例值。當我運行它時,根本沒有顯示任何項目。它是否必須是靜態的? – 2010-03-20 01:22:01

+0

@Joan:你可以做「this.DataContext = this;」在你的構造函數中,在代碼後面,如果你想。不過,我強烈建議閱讀我在更新中發佈的文章 - 這將有助於理解爲什麼你想要做這些事情,而不是試圖通過使事情工作摸索...... – 2010-03-20 01:22:10