什么是依赖属性:自己没存储空间,需要附加(Binding)到其他属性上并使用它的值
自定义一个 依赖属性:
public class Dependency : DependencyObject //一定要继承自DependencyObject类
{
//对依赖属性封包,可以没有
public string PersonAge
{
get
{
return (string)GetValue(Age);
}
set
{
SetValue(Age,value);
}
}
//依赖属性的定义和注册,三个参数是属性的名字,类型,和宿主类型
public static readonly DependencyProperty Age = DependencyProperty.Register("Age",typeof(string),typeof(Dependency));
}
定义一个正常的属性
class RunClass : ViewModelBase //继承ViewModelBase
{
private string ss;
public string Ss
{
get
{
return ss;
}
set
{
ss = value;
OnPropertyChanged(nameof(Ss)); //一定要有,否则不会通知依赖属性进行更改
}
}
}
定义ViewModelBase
class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string pName)
{
if (PropertyChanged != null)
{
PropertyChanged(this,new PropertyChangedEventArgs(pName));
}
}
}
进行两个属性的Binding
public MainWindow()
{
InitializeComponent();
RunClass run = new RunClass();
Dependency de = new Dependency();
//进行两个属性的Binding
Binding bd = new Binding("Ss") { Source = run};
BindingOperations.SetBinding(de,Dependency.Age,bd);
run.Ss = "123";
string personAge = de.PersonAge; //断点检查de.PersonAge的值是否已经随run.Ss的值一起改变
string personAge1 = personAge;
}