這是我第一次在WPF應用程序中使用TreeView控件,並且變得比我想象的更加困難。無法綁定WPF TreeView
我的TreeView必須由MyGroup和MyList類填充。 MyGroup可以有零個或幾個MyGroup子級和一個或多個MyList子級實例。
所有層次結構當前存儲在一個靜態MyGroup實例(RootGroup)中。
我的目標是綁定這個實例,因爲當RootGroup的子項被修改時,樹視圖被更新。
更多的用戶可以在TreeView中拖放組和列表來修改層次結構,RootGroup也會被更新。
我已經閱讀了一些關於TreeViewControl的教程,但是我從來沒有見過有人做過這樣的可編輯TreeView。
我需要一些ViewModel來做到這一點嗎? 你有關於這種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 >
謝謝。
是的,用viewmodel做。 –