无法绑定WPF TreeView

时间:2016-11-28 17:21:19

标签: c# wpf xaml treeview

这是我第一次在WPF应用程序中使用TreeView Control,这比我想象的要困难。

My TreeView必须由MyGroup和MyList类填充。 MyGroup可能有零个或几个MyGroup子项以及一个或多个MyList子实例。

所有层次结构当前都存储在一个静态MyGroup实例(RootGroup)中。

我的目标是绑定此实例,因为在修改RootGroup的子项时,会更新树视图。

更多用户可以在TreeView中拖放组和列表来修改层次结构,RootGroup也会更新。

我已经阅读了一些关于TreeViewControl的教程,但是我从来没有见过像这样制作可编辑TreeView的人。

我需要一些ViewModel才能执行此操作吗? 你有关于这种TreeView控件的例子吗?

编辑: 这就是我所做的,但TreeView中没有显示任何内容。

public class VecViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(string propname)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propname));
            }
        }
    }

public class VecGroup : VecViewModelBase
{
    public string Name { get; set; }
    private ObservableCollection<VecGroup> _groups;
        public ObservableCollection<VecGroup> Groups
        {
            get { return _groups; }
            set
            {
                _groups = value;
                OnPropertyChanged("Groups");
            }
        }

        private ObservableCollection<VecList> _lists;
        public ObservableCollection<VecList> Lists
        {
            get { return _lists; }
            set
            {
                _lists = value;
                OnPropertyChanged("Lists");
            }
        }

        public IList Children
        {
            get
            {
                var c = new CompositeCollection();
                c.Add(new CollectionContainer { Collection = Groups } );
                c.Add(new CollectionContainer { Collection = Lists });
                return c;
            }
        }
}
public class VecList : VecViewModelBase
{
    public string Name { get; set; }
}

MyTreeView.xaml.cs

public partial class MyTreeView : UserControl
{
    public ObservableCollection<VecGroup> VecRoot;
    public MyTreeView()
    {
        InitializeComponent();

        VecRoot = new ObservableCollection<VecGroup>() { new VecGroup() { Name = "Test" } };
    }
}

MyTreeView.xaml

<UserControl.DataContext>
    <local:MyTreeView/>
</UserControl.DataContext>

<TreeView ItemsSource="{Binding VecRoot}" x:Name="ExplorerView">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type vec:VecGroup}" ItemsSource="{Binding Children}">
            <Label Content="{Binding Name}"/>
        </HierarchicalDataTemplate>

        <DataTemplate DataType="{x:Type vec:VecList}">
            <Label Content="{Binding Name}"/>
        </DataTemplate>
    </TreeView.Resources>
</TreeView >

谢谢。

1 个答案:

答案 0 :(得分:0)

看看这个项目:Simplifying the WPF TreeView by Using the ViewModel Pattern 在这个项目中,他们绑定TreeView并搜索其中的项目。