这是我第一次在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 >
谢谢。
答案 0 :(得分:0)
看看这个项目:Simplifying the WPF TreeView by Using the ViewModel Pattern 在这个项目中,他们绑定TreeView并搜索其中的项目。