WPF知识点汇集

Logo

WPF知识点汇集

Vista de mapa mental

Esquema de mapa mental

WPF知识点汇集

数据绑定Binding

原生WPF

CLR属性 ,类继承INotifyPropertyChanged,自己写事件通知

Prism框架

View层控件通过绑定Vm的可通知属性进行界面/数据更改

绑定模式有3种

OneWay单向绑定,界面更新,VM属性不更

TwoWay双向绑定,都更新

OneToSource单向绑定,界面不更,VM更

命令Command

View层控件通过绑定命令属性,触发命令方法/并可以判断是否执行

命令有3种

快捷键cmd,命令+方法

快捷键cmdfull,命令+许可

快捷键cmdg,命令+参数

资源Resources

画刷资源

可以复用的颜色模板

资源样式Style

批量给控件设置现有属性

控件模板ControlTemplate

改变控件内部架构/组成,例如自己搭建Border,Grid,TextBox组合

资源的作用范围

就近原则

控件自身 Resources → 2. 父容器 Resources → 3.Window 资源 → 4. App.xaml 应用程序级资源

资源字典

用来存放样式,控件模板

静态资源StaticResource

加载时一次性查找/绑定,之后不再区字典找,界面不会更新

动态资源DynamicResource

运行时修改资源界面自动刷新,但是更消耗资源,少用

界面引用字典用 </ResourceDictionary.MergedDictionaries> 嵌套

触发器Triggers

★以下含义仅限于触发器内:

Property,监听某属性

Value,达成某条件

Setter,执行某事

TargetName=“{要改的属性}”

自定义控件

继承Control,控件底层都是它

静态构造,OverrideMetadata 让框架自动去资源里找对应的模板

依赖属性

控件模板,界面绑定

变更回调方法签名OnMyPropertyChanged

依赖

参数d是属性的宿主控件实例

附加

参数d是被挂载的目标控件

e参数二者一样,存放新旧值和属性标识

属性

依赖属性DependencyProperty.Register()/快捷键propdp

支持绑定,动画,通知

组成

静态字段注册依赖属性

约定:字段名必须 = 属性名 + "Property"

CLR属性包装器,里面不能写逻辑

回调函数(可选)

用在哪些地方

自定义控件暴露参数

TemplateBinding绑定的是依赖属性

Trigger 只能监听依赖属性,普通属性不响应

附加属性DependencyProperty.RegisterAttached()

给别的控件外加属性,本质也是依赖属性

组成

定义在静态类里

静态字段注册

Get,Set静态方法,不是包装器

回调(可选)

MVVM

M是Model

数据实体

单个数据可以通过VM中转

多个数据通过数据模板

V是View

界面,不认识Model,通过绑定VM属性间接通信

不能直接改属性

原生通过DataContext = VM 拿到VM实例

Prism框架通过文件名加ViewModel自动绑定

VM是ViewModel

处理界面状态和操作命令

不能直接引用控件

数据模板DataTemplate

给数据设计UI布局,模板内绑定Model,一套模板套多套数据

一般用在集合控件/表格中

不用自己再给数据添控件,每条数据自动生成卡片

配合数据的变化实现界面颜色字体的变化

数据触发器DataTrigger

绑定Model里的某个值,进行监视

Value设定触发值

Setter实现某事

转换器

继承IValueConverter

实现Convert正向转换

把值转换成字符串

Model的值传进来,显示到界面

实现ConvertBack反向转换

把字符串转换成值

用户界面改的值存到Model

区域导航

区域Region 在xaml里挖一块区域

导航Navigation找到区域的坑,把另一个界面填进去

App里登记新View的名字

VM依赖注入,发起导航

导航传参

发送方用区域,导航,键对值传参

接收方继承INavigationAware接口-感知导航

导航日志

前进GoForward和后退GoBack

两个命令及按钮绑定

每个界面的js代码里加自动复制,dll文件自动推送到主项目文件

需要重新生成再运行,否则不更新dll

事件聚合器

跨模块跨VM通信

作用:解耦,不互相引用就能通信

新建类继承事件聚合器PubSubEvent<>

使用时引用using Prism.Events

引用using 继承聚合器的类.Events;

尖括号里是数据类型

拿到事件聚合器调用GetEvent

VM构造函数依赖注入事件聚合器IEventAggregator ea

发送方Publish

订阅方Subscribe

IOC注入

一般采用构造函数注入

组成

Container容器

Prism 用 DryIoc 容器,负责创建对象、管理依赖、注入参数

Register注册

启动时告诉容器什么接口对应什么实现

Resolve解析

创建对象时,容器按注册找到实现类,连依赖一起创建好传进去

注册方式

RegisterSingleton — 单例

全局只有一个实例,所有注入拿到同一个,例如事件聚合器

RegisterTransient — 瞬时

每次注入都 new 一个新的,例如ViewModel

ZHE5060

Autor

ZHE5060

Compartir este mapa mental

Desarrollado por Mind Elixir Cloud