1、一个依赖对象示例:
public class MyDendencyControl : MyDependencyObject
{
public static readonly MyDependencyProperty ContentDependencyProperty =
MyDependencyProperty.Register("Content", typeof(string), typeof(MyDendencyControl), new MyPropertyMetadata("hello"));
//封装成普通属性的依赖属性,注意调用的是基类的相关方法。
public string Content
{
get
{
return base.GetValue(ContentDependencyProperty).ToString();
}
set
{
base.SetValue(ContentDependencyProperty, value);
}
}
}
2)一个实现了INotifyPropertyChanged接口的数据提供类
public class MyNotifyPropertyClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string PropertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
}
private string _Name;
public string Name
{
get
{
return _Name;
}
set
{
if (_Name != value)//这是比较好的习惯,可以提供性能.
{
_Name = value;
RaisePropertyChanged("Name");
}
}
}
}
3、测试连动(应用)
//创建一个依赖对象实例
MyDendencyControl theCtrl = new MyDendencyControl();
//创建一个绑定目标类
MyNotifyPropertyClass theClass = new MyNotifyPropertyClass();
//构建绑定,这种是手工绑定方法,在xaml中设置,最终也会解释成如下代码:
MyBinding theBinding = new MyBinding();
theBinding.TargetObject = theClass;
theBinding.PropertyName = "Name";
theCtrl.SetBinding(MyDendencyControl.ContentDependencyProperty, theBinding);
//默认值
MessageBox.Show(theCtrl.Content);
theClass.Name = "hello,you are good!";
//关联属性变化后再看当前值
MessageBox.Show(theCtrl.Content);
//依赖属性变化,会通知关联类属性也变化.
theCtrl.Content = "are you ready?";
MessageBox.Show(theClass.Name);
到此,微软的WPF依赖属性,绑定和通知属性及相互连动机制就完成了,当然,只是简单的模拟。微软的实现还是要复杂很多,但原理基本如此。
分享到:
相关推荐
wpf实现数据绑定Binding实现数据绑定、依赖属性
WPF依赖项属性示例源代码
WPF入门第6篇 界面绑定属性刷新 INotifyPropertyChanged 的示例项目源码。 具体可以查看博客 : https://blog.csdn.net/wf824284257/article/details/89083825
深入讲解binding 的目标端 什么对象才能作为binding 的target 以及binding 将把数据送往何处
WPF实现MVVM的事件绑定的两种非常规方式。 参考博客:https://blog.csdn.net/IQQQQU/article/details/86530285 1、重写InvokeCommandAction来扩充返回的参数 2、运用Behavior来实现事件,可以通过两种方式来获取...
依赖属性详解,有源码 //传入ownerType增加Owner public DependencyProperty AddOwner(Type ownerType) { return AddOwner (ownerType, null); } //增加所有者,根据ownerType和typeMetadata public ...
WPF优秀项目及源码 wosk-94877WPF优秀项目及源码 wosk-94877WPF优秀项目及源码 wosk-94877WPF优秀项目及源码 wosk-94877WPF优秀项目及源码 wosk-94877WPF优秀项目及源码 wosk-94877WPF优秀项目及源码 wosk-94877WPF...
WPF 依赖属性 DependencyProperty C# WPF 依赖属性 DependencyProperty C# WPF 依赖属性 DependencyProperty C# WPF 依赖属性 DependencyProperty C#
WPF优秀项目及源码 wpfinspector-19717WPF优秀项目及源码 wpfinspector-19717WPF优秀项目及源码 wpfinspector-19717WPF优秀项目及源码 wpfinspector-19717WPF优秀项目及源码 wpfinspector-19717WPF优秀项目及源码 ...
WPF实现一个按钮,内容是数字,利用绑定 线程可以增加按钮数字 点击按钮也可以增加数字 退出不报错。
WPF优秀项目及源码 odyssey-79962WPF优秀项目及源码 odyssey-79962WPF优秀项目及源码 odyssey-79962WPF优秀项目及源码 odyssey-79962WPF优秀项目及源码 odyssey-79962WPF优秀项目及源码 odyssey-79962WPF优秀项目及...
WPF优秀项目及源码 wpfmdi-81799WPF优秀项目及源码 wpfmdi-81799WPF优秀项目及源码 wpfmdi-81799WPF优秀项目及源码 wpfmdi-81799WPF优秀项目及源码 wpfmdi-81799WPF优秀项目及源码 wpfmdi-81799WPF优秀项目及源码 ...
WPF优秀项目及源码 timeline-79962WPF优秀项目及源码 timeline-79962WPF优秀项目及源码 timeline-79962WPF优秀项目及源码 timeline-79962WPF优秀项目及源码 timeline-79962WPF优秀项目及源码 timeline-79962WPF优秀...
WPF优秀项目及源码 wpfrealtime-16372WPF优秀项目及源码 wpfrealtime-16372WPF优秀项目及源码 wpfrealtime-16372WPF优秀项目及源码 wpfrealtime-16372WPF优秀项目及源码 wpfrealtime-16372WPF优秀项目及源码 ...
wpf 二种方式绑定控件wpf 二种方式绑定控件wpf 二种方式绑定控件wpf 二种方式绑定控件wpf 二种方式绑定控件wpf 二种方式绑定控件
WPF优秀项目及源码 wpfsvl-16372WPF优秀项目及源码 wpfsvl-16372WPF优秀项目及源码 wpfsvl-16372WPF优秀项目及源码 wpfsvl-16372WPF优秀项目及源码 wpfsvl-16372WPF优秀项目及源码 wpfsvl-16372WPF优秀项目及源码 ...
4. WPF基础之属性系统 26 5. WPF基础之路由事件 33 6. WPF基础之布局系统 46 7. WPF基础之样式设置和模板化 51 8. 详谈WPF开发中的数据虚拟化 64 XAML语法 74 1. XAML语法术语 74 2. 代码隐藏和XAML 82 3. XAML和...
WPF优秀项目及源码 wpfcarousel-20228WPF优秀项目及源码 wpfcarousel-20228WPF优秀项目及源码 wpfcarousel-20228WPF优秀项目及源码 wpfcarousel-20228WPF优秀项目及源码 wpfcarousel-20228WPF优秀项目及源码 ...
wpf5种数据绑定方式示范 OneWayToSource OneWay TwoWay
演示了WPF占用依赖属性的使用,以及优先级: 属性系统强制转换>动画>本地值>触发器>Setter>继承>依赖属性元数据的默认值 环境:.Net 4.0 framework