2010-03-19 62 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