Binding(二):控件关联和代码提升

    上节我们讲到,使用Binding,我们可以关联后台代码中的属性,在某些情况下,我们可能需要将两个控件关联起来,借助Binding,我们也可以轻松的实现。

关联控件

    设想这样一个场景,界面中有个CheckBox,和一个Button,只有当CheckBox被选中的时候,Button才可用或者显示,如果按照常规的做法,那应该是借助CheckBox的Click事件去手动控制Button的显示等等,但我们如果使用Binding,则会简单很多,请看如下代码:

    Binding有个ElementName的属性,是专门用于跟控件做绑定的,把某个控件的名字赋给它,系统会自动去这个控件上找Path指定的属性,CheckBox的IsChecked属性用来指示是否被选中, 将其绑定到Button的IsEnabled属性上,就可以实现两者的联动。

    第二个Button则是使用Source的形式,借助x命名空间的Reference指令,拿到名称为CB的控件引用,将其作为源,效果是一样的。

    其对应的后台代码为(部分):

Binding binding = new Binding();
binding.Source = CB; //控件引用
binding.ElementName = "CB"; //控件名

    运行效果如下:

    当然,这是在两个控件绑定的属性类型都一致的情况下,如果不一致呢?比如说上述情景中让Button显示和隐藏,显然bool是不能转换为Visibility枚举的,这就需要用到数据转换器了,我们下节再讲,它主要还涉及到XAML资源的知识,适合单独拿一节出来。

代码提升

    在不使用第三方框架的情况下,我一般会使用如下代码来实现INotifyPropertyChanged接口:

public class NorifyBase:INotifyPropertyChanged
{public event PropertyChangedEventHandler PropertyChanged;protected void RaisePropertyChanged([CallerMemberName] string propertyName = null){OnPropertyChanged(new PropertyChangedEventArgs(propertyName));}protected virtual void OnPropertyChanged(PropertyChangedEventArgs args){this.PropertyChanged?.Invoke(this, args);}
}

    将其再封装一层,并且放在一个类里边作为父类,由子类去继承,实现代码复用。

    这样原来set块中的通知逻辑就改为了如下所示:

//旧代码
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Data"));
//新代码
this.RaisePropertyChanged();

    此处要解释一下,CallerMemberName这个Attribute,它用来在运行时动态获取调用者的名字,简单来说就是在方法内调用它,它就获取到方法的名赋给参数,在属性块中调用它,它就获取到属性名赋给参数,在类中就是类名。

本节到此结束...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python实战excel_实战python 读写EXCEL表

python/EXCEL读取保存import xlwtimport xlrdimport osdef read_excel(filename):row_list []bk xlrd.open_workbook(filename)try:sh bk.sheet_by_name("Sheet1")except:print("no sheet in %s named Sheet1" % filename)else:# 获取行数nrows sh.nro…

网页表格线框html,关于Dreamweaver中怎么让html网页中的table边框细线显示?

关于Dreamweaver中怎么让html网页中的table边框细线显示?对于不是编程的我们,用Dreamweaver制作表格的情况下。默认表格边框会标的比较粗,今天给大家介绍下制作西表格超级简单的方法。是复制一段CSS内嵌样式方法来制作细线表格,然后再通过bo…

众望所归!中国机器狗能【后空翻】了。。。

全世界只有3.14 % 的人关注了青少年数学之旅在北京亦庄举办的世界机器人大会昨天结束了,这次大会上明显的感觉机械狗多了不少,中瑞福宁展示了四足多用途机器人Anymal,深度学习加持爬行、走路、跑步、跳舞样样精通:上楼梯的Anymal算…

男人别让爱你的女孩流泪

曾经以为付出就会有回报,付出才知道,在她的心里我始终不是最重要,无可奈何花落去,似曾相识燕归来。 经年少轻狂的我不知道什么是珍贵,直到有天,我回忆过去,我才知道眼泪的味道是咸的…… 第一次…

Binding(一):数据绑定

这节开始分几期来讲一下WPF中Binding的相关用法,本节主要讲使用Binding进行数据绑定。Binding的作用在WinForm中,我们要想对控件赋值,需要在后台代码中拿到控件对象进行操作,这种赋值形式,从根本上是无法实现界面与逻辑…

浙江省2021年英语高考成绩查询,浙江高考成绩查询、志愿填报时间公布!

为期四天的2021年浙江省高考将于明天下午落幕对于高考生来说志愿填报是除考试外的重要环节今晚,浙江省教育考试院发布2021年浙江省高考志愿填报日程安排根据计划6月26日左右将公布各段分数线和一分一段线提供考试成绩和位次号查询所有考生高考志愿均实行网上填报浙江…

background 旋转_第4章 旋转的圆弧(《Python趣味创意编程》教学视频)

(图书介绍:童晶:《Python趣味创意编程》新书预告)本章我们将实现旋转的圆弧,如图所示。首先学习圆弧的绘制和旋转;接着利用全局变量实现圆弧逐渐变长,学习if选择语句,实现圆弧长度的…

大师之路-GoLive 视频教程

全部章节 (54Files/1.2G)01 输出网页设计稿 (素材)02 建立站点03 操作方式初识04 用版面网格进行布局05 创建翻转及脚本库设置06 通过关系图策划站点07 使用表格08 表格的控制和嵌套09 应用表样式和表数据处理10 表格制作实战(1/2)11 表格制作实战(2/2)12 色彩应用13 管理站点色…

世纪渣男何书桓! | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅(图源网络,侵权删)渣男,实锤!↓ ↓ ↓

你也可以搞懂的微服务第一篇——来自ThoughtWork的学习体验

????欢迎点赞 :???? 收藏 ⭐留言 ???? 如有错误敬请指正,赐人玫瑰,手留余香!????本文作者:由webmote 原创,首发于 【掘金】????作者格言:生活在于折腾,当你不折…

laravel缓存html,Laravel 静态页面缓存 JosephSilber/page-cache - 码农天地

JosephSilber/page-cache Laravel 静态页面缓存2020-02-26 09:39:53Laravel 页面缓存这个包允许您轻松地将响应缓存为磁盘上的静态文件,以便更快速地加载页面。包管理地址:安装:用 composer 安装 page-cache 包:composer require …

pca 累积方差贡献率公式_机器学习数据降维方法:PCA主成分分析

PCA在机器学习中很常用,是一种无参数的数据降维方法。PCA步骤:将原始数据按列组成n行m列矩阵X将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值求出协方差矩阵求出协方差矩阵的特征值及对应的特征向量将特征向量按对应特征值大…

克制

克制,克制,学会克制自己的情绪!生气容易变老,生气是浪费自己的时间,生气是对自己不负责,生气容易对别人幼小的心灵造成伤害。。。 总之,生气这个坏东西,弃之! 转载于:htt…

教程丨亿万网友一起换头像欢庆新中国成立70周年,就差你了!

全世界只有3.14 % 的人关注了青少年数学之旅眼看着2019年国庆节马上要到了大街小巷都挂起来显眼的国旗而今天早上朋友圈更是被“国旗”刷屏一打开朋友圈满屏的国旗微信头像不少网友们都以为只要在朋友圈“微信官方”就能获取定制国旗头像虽说这是一个官方的彩蛋但实际上并不是这…

如何在已安装TMG2010服务器上安装Symantec Backup Exec 2010 Remote Agent

公司一台TMG服务器更换为新服务器,安装部署完TMG2010后,再安装Backup Exec 2010 Remote Agent时无法通过推送方法安装成功,出现如下错误提示: 此时,只好通过手动方法在TMG服务器上安装Be Agent。 登录TMG服务器&#x…

如何在 C# 9 中使用record类型?

原文链接:https://www.infoworld.com/article/3607372/how-to-work-with-record-types-in-csharp-9.html原文标题:How to work with record types in C# 9翻译:沙漠尽头的狼(谷歌翻译加持)利用 C# 9 中的record类型来构建不可变类型和线程安全…

计算机专业专业课代号408,计算机专业考研你一定要知道的事情!

1.计算机专业专业课比较难,建议考研最好是本专业或者相关专业,有一定的基础,跨考有一定的难度。2.计算机考研主要分为学硕和专硕两个方向。学硕为计算机技术应用,专硕为计算机应用和软件工程。3.考试科目我这里只说学硕(专硕每个学…

化妆definer是什么意思_化妆品上的r是什么意思

1、英米茄化妆品包装盒上的R是什么意思用圆圈R,是“注册商标”的标记,意思是该商标已在国家商标局进行注册申请并已经商标局审查通过,成为注册商标。圆圈里的R是英文register注册的开头字母。商标标记:中国商标法实施条例规定&…

巧用TensorFlow实现图像处理

经过几年的发展,深度学习方法摧枯拉朽般地超越了传统方法,成为人工智能领域最热门的技术。谷歌、亚马逊、百度、Facebook 纷纷开源了自己的深度学习框架。而支撑AlphaGo的核心技术架构,TensorFlow,以其一鸣惊人的绝对表现&#xf…

c#实现链表

c#实现链表 首先定义结点类型&#xff0c;定义了&#xff0c;前一个指针域&#xff0c;后一个指针域&#xff0c;如下&#xff1a;using System; namespace List{ /// <summary> /// Summary description for ListNode. /// </summary> // 结点类 public class Lis…