在项目中使用OnPropertyChanged方法,最简单的实例:
private event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string name = "")
{
PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(name));
}
private int myVar;
public int MyProperty
{
get { return myVar; }
set { myVar = value; OnPropertyChanged("MyProperty"); }
}
TreeView两层结构的实例,如下代码:
<TreeView ItemsSource="{Binding TVDataSource}" SelectedItemChanged="TreeView_SelectedItemChanged" >
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Nodes}">
<WrapPanel>
<TextBlock VerticalAlignment="Center" Text="{Binding Name}"/>
</WrapPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
TVDataSource是一个树结构集合,对象为TreeViewDataModel,其中有Name属性,Nodes集合。Nodes集合中存放TreeViewNodeDataModel对象。
这样在后台只需要给TVDataSource集合赋值,树结构就会展现出两级结构。并可以通过点击树结构进行删除等操作。
对象:
public class TreeViewDataModel
{ public TreeViewDataModel()
{
Nodes = new ObservableCollection<TreeViewNodeDataModel>();
}
public string Name { get; set; } private ObservableCollection<TreeViewNodeDataModel> nodes;
public ObservableCollection<TreeViewNodeDataModel> Nodes
{
get { return nodes; }
set { nodes = value; OnPropertyChanged("Nodes"); }
} private event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string name = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
} public class TreeViewNodeDataModel
{
public string Name { get; set; }
}
}
赋值:
private ObservableCollection<TreeViewDataModel> tVDataSource;
public ObservableCollection<TreeViewDataModel> TVDataSource
{
get { return tVDataSource; } set {tVDataSource= value; OnPropertyChanged("TVDataSource"); } }
TVDataSource = new ObservableCollection<TreeViewDataModel>();
TreeViewDataModel tv = new TreeViewDataModel();
tv.Name = "A";
TreeViewNodeDataModel tvNode = new TreeViewNodeDataModel();
tvNode.Name = "a";
tv.Nodes.Add(tvNode);
TVDataSource.Add(tv);