使用ObservableCollection绑定TreeView

时间:2013-03-23 23:10:44

标签: c# wpf data-binding treeview

我正在使用Visual Studio 2010在C#中制作一个播放器。 我正在寻找一种显示文件播放列表的方法。 所以我正在使用TreeView,我想将它与ObservableCollection绑定。 我的ObservableCollection:

public class Media
{
 string type; // Video, music, or picture
 string name; // example : 50-cent.mp3
 string path; // The path of the file
}

public class Playlist 
{
 string name; // The name of the playlist
 ObservableCollection<Media> list; // The list of Media
}
public ObservableCollection<Playlist> playLists = new ObservableCollection<Playlist>();

如你所见,我有var播放列表,里面有元素,里面有媒体列表。

我想在wpf中显示这个对象,我认为最好的是TreeView。 我无法在互联网上找到绑定TreeView和我的var播放列表的方式。 我不知道如何在我的WPF中制作我的TreeView:S ... 我在网上看到有些人使用HierachicalDataTemplate,但我真的不知道怎么做。

请帮助

修改 我正在尝试大卫给出的帖子,我把我的WPF

<TreeView Grid.Column="1" Height="193" HorizontalAlignment="Left" Margin="15,209,0,0" Name="treeView1" VerticalAlignment="Top" Width="120">
        <TreeView.Resources>
            <HierarchicalDataTemplate DataType="{x:Type src:Playlist}" ItemsSource="{Binding list}">
                <TextBlock Text="{Binding name}"/>
            </HierarchicalDataTemplate>
            <DataTemplate DataType="{x:Type src:Media}">
                <TextBlock Text="{Binding name}"/>
            </DataTemplate>
        </TreeView.Resources>
    </TreeView>

我有问题,我什么都没有:S。 我完全喜欢这个教程:S

3 个答案:

答案 0 :(得分:1)

如果您想获得如下所示的效果:

enter image description here enter image description here

您可以查看此帖子:WPF Treeview: data binding of heterogeneous types of data using CompositeCollection class

注意:您需要从INotifyPropertyChanged接口派生您的类:

public class Media : INotifyPropertyChanged 
{
   string _name;
   string Name {
       get {return _name;} 
       set { _name=value; OnPropertyChanged("Name");}} //OnPropertyChanged is important!
   ...
}

请参阅有关INotifyPropertyChanged here的更多帮助。

答案 1 :(得分:0)

首先,您需要向我们提供一个XAML,您尝试绑定一个集合(我想您正在使用HierarchicalDataTemplate。第二,我看到“媒体列表”是私有的。当我知道私有财产无法绑定。

答案 2 :(得分:0)

您无法与fields绑定。您只能绑定到班级中的Public Properties

public ObservableCollection<Playlist> PlayLists { get; set; }