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资源的知识,适合单独拿一节出来。
代码提升
在不使 1d7c 用第三方框架的情况下,我一般会使用如下代码来实现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,它用来在运行时动态获取调用者的名字,简单来说就是在方法内调用它,它就获取到方法的名赋给参数,在属性块中调用它,它就获取到属性名赋给参数,在类中就是类名。
- iPhone开发学习笔记001——Xib界面上的控件与代码的相互关联方法
- Xib界面上的控件与代码的相互关联方法
- iPhone开发学习笔记001——Xib界面上的控件与代码的相互关联方法
- 给通过代码创建的控件关联消息映射
- Hadoop join 关联提升版 开发代码调整解决 reduce时候 OOM问题
- 用户控件的后台代码关联使用CodeBehind还是CodeFile
- 使用Binding在控件之间建立关联
- Xib界面上的控件与代码的相互关联方法
- 故事板控件无法和代码关联的问题解决
- iPhone开发学习笔记001——Xib界面上的控件与代码的相互关联方法
- iphone之控件、控件事件与OC代码关联
- jQuery Ajax实现Select多级关联动态绑定数据的实例代码
- Android HorizontalScrollView内子控件横向拖拽实例代码
- 有哪些 Java 源代码看了后让你收获很多,代码思维和能力有较大的提升?
- 十条jQuery代码片段助力Web开发效率提升
- Asp.net 2.0 自定义控件开发专题讲解[为用户控件增加DataSource属性, 能够自动识别不同数据源](示例代码下载)
- Android中RecyclerView的item中控件的点击事件添加删除一行、上移下移一行的代码实现
- 带节假日JS万年历控件代码
- iOS开发-UI控件:代码取消UITableViewCell选中状态
- 【2015年第六届蓝桥杯C/C++程序设计本科B组决赛 关联账户(代码填空) 】+ 并查集