C# 如何使用Xaml将列表绑定到WPF树视图?

C# 如何使用Xaml将列表绑定到WPF树视图?,c#,.net,wpf,treeview,C#,.net,Wpf,Treeview,我不知道如何将饮料列表绑定到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.Popular

我不知道如何将饮料列表绑定到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 ) };
        }
    }

如何在xaml中的代码中指定集合?

通常,您需要确保为UserControl或Window设置
DataContext
,然后将“ColdLink”定义为DataContext类中的属性集合

如果您这样做,那么所需的全部内容将是:

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

我强烈建议大家多读一读。充分理解这一点是使WPF真正令人愉快的关键之一


边注:鉴于你最近的问题和你所采取的方法,你可能需要考虑花些时间来阅读MVVM和其他架构方法。即使您不使用MVVM,描述它的文章也可能会帮助您用WPF术语“思考”,这将非常有帮助


我写了一系列关于从迁移的文章。它讨论了特定的WPF特性,以及为什么您应该改变您的思考方式,但是介绍一些概念的速度比大多数纯“MVVM”文章要慢一些。我想我会提到它,以防有所帮助。

通常,您需要确保为UserControl或Window设置
DataContext
,然后将“ColdLink”定义为DataContext类中的属性集合

如果您这样做,那么所需的全部内容将是:

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

我强烈建议大家多读一读。充分理解这一点是使WPF真正令人愉快的关键之一


边注:鉴于你最近的问题和你所采取的方法,你可能需要考虑花些时间来阅读MVVM和其他架构方法。即使您不使用MVVM,描述它的文章也可能会帮助您用WPF术语“思考”,这将非常有帮助


我写了一系列关于从迁移的文章。它讨论了特定的WPF特性,以及为什么您应该改变您的思考方式,但是介绍一些概念的速度比大多数纯“MVVM”文章要慢一些。我想我会提一下,以防有用。

谢谢,你提到的第一件事是怎么做的?“通常,您需要确保……”。我必须这样做吗?我的ColdLink作为实例值在Window1中。当我运行它时,它根本没有显示任何项目。它必须是静态的吗?@Joan:如果需要,您可以在构造函数中的代码隐藏中执行“this.DataContext=this;”。然而,我强烈建议你阅读我在更新中发布的文章——这将有助于你理解为什么你想做这些事情,而不是只是试图摸索着让事情顺利进行……@琼:不,它不需要是静态的。它确实需要是一个属性,而不是一个字段。另外,除非您使用ObservableCollection而不是List,否则在加载窗口之前,您需要确保这些项存在,否则绑定将无法正常工作…谢谢,我将阅读它们。可能只是你的最后一个链接,因为我不想在开始做任何事情之前阅读100页,否则我会对wpf感到冷淡。谢谢,你提到的第一件事是怎么做的?“通常,您需要确保……”。我必须这样做吗?我的ColdLink作为实例值在Window1中。当我运行它时,它根本没有显示任何项目。它必须是静态的吗?@Joan:如果需要,您可以在构造函数中的代码隐藏中执行“this.DataContext=this;”。然而,我强烈建议你阅读我在更新中发布的文章——这将有助于你理解为什么你想做这些事情,而不是只是试图摸索着让事情顺利进行……@琼:不,它不需要是静态的。它确实需要是一个属性,而不是一个字段。另外,除非您使用ObservableCollection而不是List,否则在加载窗口之前,您需要确保这些项存在,否则绑定将无法正常工作…谢谢,我将阅读它们。可能只是你的最后一个链接,因为我不想在开始做任何事情之前阅读100页,否则我会对wpf感到冷淡。你的数据没有层次结构。你真的想使用树状视图吗?在这种情况下没有多大意义。我想,
ListBox
ListView
上设置了一个排序选项的
popularity
会更有意义。谢谢,你是对的,但我从一开始就很简单,因为我不知道wpf,但以后实际上会用层次结构替换数据。@Benny:这一点也是在这个问题上提出的:@Reed-Hmm-yea。难怪,因为这两个问题几乎完全相同,而且是由同一个人提出的。您的数据没有层次结构。你真的想使用树状视图吗?在这种情况下没有多大意义。我想,
ListBox
ListView
上设置了一个排序选项的
popularity
会更有意义。谢谢,你是对的,但我从一开始就很简单,因为我不知道wpf,但以后实际上会用层次结构替换数据。@Benny:这一点也是在这个问题上提出的:@Reed-Hmm-yea。难怪,因为这两个问题几乎完全相同,而且是由同一个人提出的。