WPF几个基础概念的浅显理解
2018-01-19 08:54
417 查看
1、逻辑树与视觉树
逻辑树在结构上与xaml文件对应视觉树更细化,拆分到控件的每个组成部分
2、依赖属性与附加属性
依赖属性:就是自己自己没有属性值,而是通过Binding从数据源获得值,就是依赖在别人身上,拥有依赖属性的对象称为依赖对象。附加属性:就是自己没有这个属性,在某些上下文中需要就被附加上去。比如TextBox的Grid.Row属性,如果我们定义TextBox类时定义一个Row属性是没有意义的,因为我们并不知道一定会放在Grid里,这样就造成了浪费。
3、路由事件和附加事件
路由事件:Button、Slider、TextBox这些类可拥有路由事件
根据.NET约定,隧道路由事件总是以单词Priview开头(如PreviewKeyDown)
对比下命令和路由事件的区别可以发现,路由事件必须写在Code-Behind代码中,而命令可以写在ViewModel里,所以直观上来讲命令更加自由灵活。
附加事件(Attached Event):
路由事件的另一种叫法,用于非继承自UIElement类
4、命令
命令与事件类似,事件用来发布传播一些消息,消息到达接收者,事件的使命就完成了,至于如何响应事件送来的消息事件并不做规定;而命令一旦发出,所有的命令目标都必须执行这个命令,二者的区别就在命令具有约束力而事件没有。命令的基本元素:
命令(Command):WPF的命令实际就是实现了ICommand接口的类,平时使用最多的是RotuedCommand类;
命令源(Command Source):命令发送者,是实现类ICommandSource接口的类,例如Button、MenuItem、ListBoxItem等;
命令目标(Command Target):命令将作用在谁身上,命令目标必须实现了IInputElement接口;
命令关联(Command Binding):负责把一些外围逻辑与命令关联起来,比如执行前对命令是否可以执行进行判断、命令执行之后进行一些后续工作等。
Button控件有Command属性,将实例化的Command赋值给Button控件,就可以在点击时执行该命令。但有的控件并不支持Command属性的设置,因此这些控件的事件产生时执行某个命令就成了一个问题。解决方法如下:
<Button> <i:Interaction.Triggers> <i:EventTrigger EventName="MouseEnter" > <cmd:EventToCommand Command="{Binding FooCommand}" CommandParameter=""/> </i:EventTrigger> </i:Interaction.Triggers> </Button>
5、验证
1. 代码直接验证(不少人直接用 MessageBox 弹出消息,Windows 的老传统),虽然够醒目,却太过打扰用户,不好。2. 通过异常验证(数据绑定,并设置 ValidatesOnExceptions=True ),调试时烦死人,不好。
3. 通过内置接口 IDataErrorInfo 、INotifyDataErrorInfo 进行验证(数据绑定),这应该是目前较为理想的验证方式。这两个接口都位于 System.ComponentModel 空间,与 INotifyPropertyChanged 在一起。
相关文章推荐
- 对WPF几个概念的理解
- C++中的声明,定义和赋值几个概念的理解
- 黑马程序员****OC语言基础****protocol概念和理解
- 对敏捷开发中常用的几个"敏捷概念"的理解
- ruby元编程,基础入门概念理解
- cocos2d-x基础概念的理解
- 理解百度云推送的几个概念
- 对面向对象几个基本概念的理解
- [转载]对于可重入、线程安全、异步信号安全几个概念的理解
- DEV之理解XtraEditors几个概念
- 8天入门wpf—— 第一天 基础概念介绍
- 黑马程序员——Java基础之面向对象的相关概念及个人理解
- Docker初体验1 —几个概念的理解
- 物体检测中常用的几个概念迁移学习、IOU、NMS理解
- (Java基础--反射)理解反射的概念
- Java EE几个重要概念理解
- JavaScript基础概念理解
- 黑马程序员****OC语言基础****NSString类的概念和理解
- 个人对SCA标准中Component,Composite等几个关键概念的理解
- 理解nodejs中的几个概念