WPF学习日记7
1.路由事件
解析:路由事件的事件拥有者和事件响应者之间则没有直接显式的订阅关系,事件的拥有者只负责激发事件,事件将由谁响应它并不知道,事件的响应者则安装有事件侦听器,针对某类事件进行侦听,当有此类事件传递至此时事件响应者就使用事件处理器来响应事件并决定事件是否可以继续传递。
2.WPF路由事件路由策略
解析:
[1]Bubble冒泡式:路由事件由事件的激发者出发向它的上级容器一层一层路由,直至最外层容器[Window或者Page]。因为是由树的底端向顶端移动,而且从事件激发元素到UI树的树根只有确定的一条路径,所以这种策略被形象地命名为冒泡式。
[2]Tunnel隧道式:事件的路由方向正好与Bubble策略相反,是由UI树的树根向事件激发控件移动。因为从UI树根向树底移动时有很多路径,但希望是由树根向激发事件的控件移动,这就好像在树根与目标控件之间挖掘了一条隧道,事件只能沿着隧道移动,所以称之为隧道式。
[3]Direct直达式:模仿CLR直接事件,直接将事件消息送达事件处理器。
3.WPF命令系统基本要素
解析:

[1]命令:WPF命令实际上就是实现了ICommand接口的类,平时使用最多的是RoutedCommand类。
[2]命令源:命令的发送者,是实现了ICommandSource接口的类。很多界面元素都实现了这个接口,其中包括Button、MenuItem、ListBoxItem等。
[3]命令目标:命令将发送给谁,或者说命令将作用在谁身上。命令目标必须是实现了IInputElement接口的类。
[4]命令关联:负责把一些外围逻辑与命令关联起来,比如执行之前对命令是否可以执行进行判断、命令执行之后还有哪些后续工作等。
4.ICommand接口方法和事件
解析:
[1]Execute方法:命令执行,或者说命令作用于命令目标之上
[2]CanExecute方法:在执行之前用来探知命令是否可被执行
[3]CanExecuteChanged事件:当命令可执行状态发生改变时,可激发此事件来通知其它对象
5.DataTemplate
解析:
[1]ContentControl的ContentTemplate属性,相当于给ContentControl的内容穿衣服
[2]ItemsControl的ItemTemplate属性,相当于给ItemsControl的数据条目穿衣服
[3]GridViewColumn的CellTemplate属性,相当于给GridViewColumn单元格中的数据穿衣服
6.ControlTemplate作用
解析:
[1]通过更换ControlTemplate改变控件外观,使之具有更优的用户使用体验及外观
[2]解决ControlTemplate,程序员与设计师可以并行工作,程序员可以先用WPF标准控件进行编程,等设计师的工作完成后,只需把新的ControlTemplate应用到程序中就可以
7.动画关系图
解析:

8.WPF和Sliverlight区别
解析:

9.MVVM模式
解析:

10.命令绑定的实现
解析:
[1]public event EventHandler CanExecuteChanged // 在命令可执行状态发生改变时触发
[2]public bool CanExecute(object parameter) //检查命令是否可用的方法
[3]public void Execute(object parameter) //命令执行的方法

11.COM
解析:所谓COM[Componet Object Model,组件对象模型],是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准。通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同、使用的开发语言是否一致以及是否运行于同一台计算机。
12.COM+
解析:
[1]COM+并不是COM的简单升级,COM+的底层结构仍然以COM为基础,它几乎包容了COM的所有内容,COM+综合了COM、DCOM和MTS这些技术要素,它把COM组件软件提升到应用层而不再是底层的软件结构,它通过操作系统的各种支持,使组件对象模型建立在应用层上,把所有组件的底层细节留给操作系统,因此,COM+与操作系统的结合更加紧密。
[2]COM+不再局限于COM的组件技术,它更加注重于分布式网络应用的设计和实现。COM+继承了COM几乎全部的优势,同时又避免了COM实现方面的一些不足,把COM、DCOM和MTS的编程模型结合起来,继承了它们的绝大多数特性,在原有的特性上增加了新的功能。
13.Properties.Settings.Default
解析:在Settings.settings文件中定义配置字段。把作用范围定义为:User则运行时可更改,Applicatiion则运行时不可更改。
14.Abt.Controls.SciChart.Wpf
解析:画图控件。
15.Ignorable="d"
解析:Ignorable="d"就是告诉编译器在实际运行时,忽略设计时设置的值。
16.DocumentViewer控件
解析:WPF使用DocumentViewer打印。
17.MVVM原理
解析:

[1]View:负责前端展示,与ViewModel进行数据和命令的交互
[2]ViewModel:负责前端视图业务级别的逻辑结构组织,并将其反馈给前端
[3]Model:主要负责数据实体的结构处理,与ViewModel进行交互
MvvMLight演示项目结构如下所示:

18.ObservableObject类型
解析:
[1]它的作用就是保证能够检测属性是否被改变。
[2]它实现了INotifyPropertyChanged接口,通过触发PropertyChanged事件达到通知UI更改的目的。
[3]在定义实体对象的时候,只需要调用RaisePropertyChanged(PropertyName)就可以进行属性更改通知
[4]实体里面定义的每个属性都加上RaisePropertyChanged(PropertyName)的调用,就可以实现对UI的交互更新
19.ViewBaseModel类
解析:ViewBaseModel同时继承ObservableObject类和ICleanup接口,所以同样有INotifyPropertyChanged接口的能力。
20.ViewModelLocator类
解析:
<Application.Resources><ResourceDictionary><vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" /></ResourceDictionary>
</Application.Resources>
每次App初始化的时候,就会去初始化ViewModelLocator类。实际上它就是一个很基本的视图模型注入器,在构造器中把使用到的ViewModel统一注册,并生成单一实例。然后使用属性把它暴露出来,每当访问属性的时候,就会返回相应的ViewModel实例。
21.System.Type
解析:表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。
22.UpdateSourceTrigger作用
解析:UpdateSourceTrigger的作用是当做何种改变的时候通知数据源做了改变。枚举类型如下所示:
[1]Default:默认值[默认为LostFocuse]
[2]Explicit:当应用程序调用UpdateSource方法时生效
[3]LostFocus:失去焦点的时候触发
[4]PropertyChanged:数据属性改变的时候触发
23.RelativeSource属性
解析:设置该属性可以根据当前目标对象的相对关系指向源目标。比如获取当前对象的父亲对象、兄弟对象或者自身的其他属性等一些数据。
[1]FindAncestor:引用数据绑定元素的父链中的上级。这可用于绑定到特定类型的上级或其子类。若要指定AncestorType和/或AncestorLevel,这就是应使用的模式。
[2]PreviousData:允许在当前显示的数据项列表中绑定上一个数据项[不是包含数据项的控件]。
[3]Self:引用正在其上设置绑定的元素,并允许你将该元素的一个属性绑定到同一元素的其他属性上。
[4]TemplatedParent:引用应用了模板的元素,其中此模板中存在数据绑定元素。这类似于设置TemplateBindingExtension,且仅在Binding位于模板内部时适用。
24.System.ComponentModel.DataAnnotations
解析:
[1]CustomValidationAttribute:使用自定义方法进行验证。
[2]DataTypeAttribute:指定特定类型的数据,如电子邮件地址或电话号码。
[3]EnumDataTypeAttribute:确保值存在于枚举中。
[4]RangeAttribute:指定最小和最大约束。
[5]RegularExpressionAttribute:使用正则表达式来确定有效的值。
[6]RequiredAttribute:指定必须提供一个值。
[7]StringLengthAttribute:指定最大和最小字符数。
[8]ValidationAttribute:用作验证属性的基类。
25.RelayCommand命令
解析:WPF命令是通过实现ICommand接口创建的。ICommand公开了两个方法[Execute及CanExecute]和一个事件[CanExecuteChanged]。如下所示:
[1]Execute方法:执行与命令关联的操作
[2]CanExecute方法:确定是否可以在当前命令目标上执行命令,返回值为true则按钮可用,为false的时候按钮disable
说明:在MvvmLight中实现ICommand接口的类是RelayCommand。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
