`
iwebcode
  • 浏览: 2013125 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

模拟实现WPF的依赖属性及绑定通知机制(4)--模拟实现绑定连动机制

 
阅读更多

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 依赖属性依赖属性依赖属性依赖属性

    wpf实现数据绑定Binding实现数据绑定、依赖属性

    WPF依赖项属性示例

    WPF依赖项属性示例源代码

    WPF入门第6篇 界面绑定属性刷新 INotifyPropertyChanged 的示例项目源码

    WPF入门第6篇 界面绑定属性刷新 INotifyPropertyChanged 的示例项目源码。 具体可以查看博客 : https://blog.csdn.net/wf824284257/article/details/89083825

    wpf 依赖属性内部机制

    深入讲解binding 的目标端 什么对象才能作为binding 的target 以及binding 将把数据送往何处

    WPF实现MVVM的事件绑定

    WPF实现MVVM的事件绑定的两种非常规方式。 参考博客:https://blog.csdn.net/IQQQQU/article/details/86530285 1、重写InvokeCommandAction来扩充返回的参数 2、运用Behavior来实现事件,可以通过两种方式来获取...

    wpf依赖属性详解

    依赖属性详解,有源码 //传入ownerType增加Owner public DependencyProperty AddOwner(Type ownerType) { return AddOwner (ownerType, null); } //增加所有者,根据ownerType和typeMetadata public ...

    WPF优秀项目及源码 wosk-94877

    WPF优秀项目及源码 wosk-94877WPF优秀项目及源码 wosk-94877WPF优秀项目及源码 wosk-94877WPF优秀项目及源码 wosk-94877WPF优秀项目及源码 wosk-94877WPF优秀项目及源码 wosk-94877WPF优秀项目及源码 wosk-94877WPF...

    WPF依赖属性DependencyProperty范例Demo

    WPF 依赖属性 DependencyProperty C# WPF 依赖属性 DependencyProperty C# WPF 依赖属性 DependencyProperty C# WPF 依赖属性 DependencyProperty C#

    WPF优秀项目及源码 wpfinspector-19717

    WPF优秀项目及源码 wpfinspector-19717WPF优秀项目及源码 wpfinspector-19717WPF优秀项目及源码 wpfinspector-19717WPF优秀项目及源码 wpfinspector-19717WPF优秀项目及源码 wpfinspector-19717WPF优秀项目及源码 ...

    WPF实现同线程绑定,跨线程绑定

    WPF实现一个按钮,内容是数字,利用绑定 线程可以增加按钮数字 点击按钮也可以增加数字 退出不报错。

    WPF优秀项目及源码 odyssey-79962

    WPF优秀项目及源码 odyssey-79962WPF优秀项目及源码 odyssey-79962WPF优秀项目及源码 odyssey-79962WPF优秀项目及源码 odyssey-79962WPF优秀项目及源码 odyssey-79962WPF优秀项目及源码 odyssey-79962WPF优秀项目及...

    WPF优秀项目及源码 wpfmdi-81799

    WPF优秀项目及源码 wpfmdi-81799WPF优秀项目及源码 wpfmdi-81799WPF优秀项目及源码 wpfmdi-81799WPF优秀项目及源码 wpfmdi-81799WPF优秀项目及源码 wpfmdi-81799WPF优秀项目及源码 wpfmdi-81799WPF优秀项目及源码 ...

    WPF优秀项目及源码 timeline-79962

    WPF优秀项目及源码 timeline-79962WPF优秀项目及源码 timeline-79962WPF优秀项目及源码 timeline-79962WPF优秀项目及源码 timeline-79962WPF优秀项目及源码 timeline-79962WPF优秀项目及源码 timeline-79962WPF优秀...

    WPF优秀项目及源码 wpfrealtime-16372

    WPF优秀项目及源码 wpfrealtime-16372WPF优秀项目及源码 wpfrealtime-16372WPF优秀项目及源码 wpfrealtime-16372WPF优秀项目及源码 wpfrealtime-16372WPF优秀项目及源码 wpfrealtime-16372WPF优秀项目及源码 ...

    wpf 二种方式绑定控件

    wpf 二种方式绑定控件wpf 二种方式绑定控件wpf 二种方式绑定控件wpf 二种方式绑定控件wpf 二种方式绑定控件wpf 二种方式绑定控件

    WPF优秀项目及源码 wpfsvl-16372

    WPF优秀项目及源码 wpfsvl-16372WPF优秀项目及源码 wpfsvl-16372WPF优秀项目及源码 wpfsvl-16372WPF优秀项目及源码 wpfsvl-16372WPF优秀项目及源码 wpfsvl-16372WPF优秀项目及源码 wpfsvl-16372WPF优秀项目及源码 ...

    WPF开发教程 ----WPF C# 编程 界面开发(很不错)

    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-20228

    WPF优秀项目及源码 wpfcarousel-20228WPF优秀项目及源码 wpfcarousel-20228WPF优秀项目及源码 wpfcarousel-20228WPF优秀项目及源码 wpfcarousel-20228WPF优秀项目及源码 wpfcarousel-20228WPF优秀项目及源码 ...

    wpf5种数据绑定方式示范

    wpf5种数据绑定方式示范 OneWayToSource OneWay TwoWay

    WPF的依赖属性的优先级演示

    演示了WPF占用依赖属性的使用,以及优先级: 属性系统强制转换>动画>本地值>触发器>Setter>继承>依赖属性元数据的默认值 环境:.Net 4.0 framework

Global site tag (gtag.js) - Google Analytics