1、一个依赖对象示例:
public class MyDendencyControl : MyDependencyObject@H_502_3@ {@H_502_3@ public static readonly MyDependencyProperty ContentDependencyProperty =@H_502_3@ MyDependencyProperty.Register("Content",typeof(string),typeof(MyDendencyControl),new MyPropertyMetadata("hello"));
//封装成普通属性的依赖属性,注意调用的是基类的相关方法。@H_502_3@ public string Content@H_502_3@ {@H_502_3@ get@H_502_3@ {@H_502_3@ return base.GetValue(ContentDependencyProperty).ToString();@H_502_3@ }@H_502_3@ set@H_502_3@ {@H_502_3@ base.SetValue(ContentDependencyProperty,value);@H_502_3@ }@H_502_3@ }@H_502_3@ }
2)一个实现了INotifyPropertyChanged接口的数据提供类@H_502_3@ public class MyNotifyPropertyClass : INotifyPropertyChanged@H_502_3@ {@H_502_3@ public event PropertyChangedEventHandler PropertyChanged;@H_502_3@ private void RaisePropertyChanged(string PropertyName)@H_502_3@ {@H_502_3@ if (PropertyChanged != null)@H_502_3@ {@H_502_3@ PropertyChanged(this,new PropertyChangedEventArgs(PropertyName));@H_502_3@ }@H_502_3@ }@H_502_3@ private string _Name;@H_502_3@ public string Name@H_502_3@ {@H_502_3@ get@H_502_3@ {@H_502_3@ return _Name;@H_502_3@ }@H_502_3@ set@H_502_3@ {@H_502_3@ if (_Name != value)//这是比较好的习惯,可以提供性能.@H_502_3@ {@H_502_3@ _Name = value;@H_502_3@ RaisePropertyChanged("Name");@H_502_3@ }@H_502_3@ }@H_502_3@ }@H_502_3@ }
3、测试连动(应用)
//创建一个依赖对象实例@H_502_3@ MyDendencyControl theCtrl = new MyDendencyControl();@H_502_3@ //创建一个绑定目标类@H_502_3@ MyNotifyPropertyClass theClass = new MyNotifyPropertyClass();@H_502_3@ //构建绑定,这种是手工绑定方法,在xaml中设置,最终也会解释成如下代码:@H_502_3@ MyBinding theBinding = new MyBinding();@H_502_3@ theBinding.TargetObject = theClass;@H_502_3@ theBinding.PropertyName = "Name";@H_502_3@ theCtrl.SetBinding(MyDendencyControl.ContentDependencyProperty,theBinding);@H_502_3@ //默认值@H_502_3@ MessageBox.Show(theCtrl.Content);@H_502_3@ theClass.Name = "hello,you are good!";@H_502_3@ //关联属性变化后再看当前值@H_502_3@ MessageBox.Show(theCtrl.Content);@H_502_3@ //依赖属性变化,会通知关联类属性也变化.@H_502_3@ theCtrl.Content = "are you ready?";@H_502_3@ MessageBox.Show(theClass.Name);
到此,微软的WPF依赖属性,绑定和通知属性及相互连动机制就完成了,当然,只是简单的模拟。微软的实现还是要复杂很多,但原理基本如此。
@H_502_3@原文链接: http://www.jb51.cc/article/p-etgyvuhf-bcq.html