2010-03-20 75 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