WPF基础学习笔记

目录

基础知识:

WPF的特点:

WPF的优点

什么是XAML?

布局基础:

样式的应用:

控件模板(ControlTemplate):

数据模板(DataTemplate):

静态资源StaticReSource跟动态资源DynamicResource的区别:

绑定

绑定的类型:

绑定的模式:默认是双向绑定

什么是上下文,DataContext?

什么是通知更改?

什么是命令ICommand?

动画基础:

配置自动查找上下文,也就是配置View和ViewModel的关系

WPF框架之MvvmLight

WPF框架之Prism

Prism区域介绍

Prism模块化介绍

Prism导航功能

Prism对话服务,即打开新窗口功能

Prism事件的发布和订阅

工作单元和仓储:

AutoMapper的作用


基础知识:

WPF的特点:

  • UI与业务分离
  • 数据绑定

WPF的优点

  • 具有良好的面向对象思想) WPF经常利用各种继承关系、多态性、重载等。
  • 需要了解数据绑定。 绑定是WPF的一大亮点。

什么是XAML?

XAML是可扩展应用程序标记语言,是一种基于XML的声明性语言,可用于创建应用程序UI

优势:

  • 将界面设计与逻辑编码分离
  • 标签化的语法,通俗易懂

布局基础:

所有的东西都放在一个Grid里面,Window == winform里面的Form窗体,

样式的应用:

控件模板(ControlTemplate):

用来修饰控件的外观的,可以对控件进行比较复杂的设计。

绑定控件的属性,但只能绑定控件本身带有的属性,

数据模板(DataTemplate):

数据来驱动ui的显示,而不是在业务代码中穿插UI控件的

静态资源StaticReSource跟动态资源DynamicResource的区别:

静态资源在第一次初始化之后就不会改变了,动态资源可以在资源发生改变时候改变。

资源字典:将一些通用的样式之类的放到一个资源字典中,方便重复使用

资源字典的配置:

资源字典的查找:

DataGrid的应用:

绑定

var bind = new Binding();   // 实例化一个新绑定
bind.Source = txb1;		// 设置源
bind.Path = new PropertyPath("Text");	// 设置要绑定的属性
bind.Mode = BindingMode.TwoWay;  	// 设置绑定模式

txb2.SetBinding(TextBox.TextProperty, bind);	// 设置绑定

绑定的类型:

  • 控件与控件之间的绑定
  • 控件与属性之间的绑定

绑定的模式:默认是双向绑定

  • 单向绑定
  • 双向绑定
  • 一次绑定

什么是上下文,DataContext?

xaml前端所需要绑定的字段,数据源等,都来自于后端的ViewModel,这个ViewModel就是需要绑定的上下文,不然找不到对应的数据源

什么是通知更改?

前段绑定的字段被重新赋值时,需要通过通知更改去更新前端的值,在属性的set方法中去调用通知更改的方法,传递的参数可以值要修改的属性的名称,也可以为空。

什么是命令ICommand?

WinForm里面的事件驱动模型,当界面跟业务发生改变时,需要改动的地方会比较多。命令就是用来解决这个问题,将UI与业务分离。

命令其实就是定义了某一个操作,写在ViewMode里面,

UI绑定:

ViewModel中创建Command:

自定义的Command:继承自ICommand

带参数的command。参数从输入框中来,绑定方法如下:

动画基础:

引用的命名空间:

在wpf中的动画分类:

  • 线性动画
  • 关键帧动画
  • 路径动画

配置自动查找上下文,也就是配置View和ViewModel的关系

一般还是使用代码的方式,但新版本好像默认就是有这个约定的,不用配置也行。

WPF框架之MvvmLight

特点:

  • 轻量级

WPF框架之Prism

配置自动查找ViewModel

Prism区域介绍

在我们的应用程序或者窗体当中去制定某一块区域,并且给它命名,就能在区域管理类中通过名字去查找到这个区域,并将其它页面,或者内容加载到这个区域。

设置区域:

Prism模块化介绍

这个模块指的其实一些类库什么的,其实类似于我在诊所客户端中,利用反射的方式加载不同功能的方法,将功能模块化,并且不在主程序中直接进行添加应用。

Prism中实现模块化的方式:

  • 通过代码的方式
  • 通过配置文件的方式

通过代码的方式:添加引用的方式,再通过重写ConfigureModuleCatalog方法把模块加载进来

缺点是:

  • 不方便,当修改引用的时候要来修改代码

通过批量加载的文件夹中的Module

  1. 首先,要设置一种查找的方式
  2. 然后每个模块都有一些约定的东西,如继承IModule,在这个类里面去写容器服务

Prism导航功能

 导航的上一步,下一步,通过导航日志来实现。

导航日志Journal的获取:

上一步,下一步命令的委托命令的创建与实现

Prism对话服务,即打开新窗口功能

  • 跟打开导航类似,也可以传递参数跟接收返回值

具体实现:

  1. 新窗体对应的ViewModel要继承并IDialogAware接口
  2. 设置窗体的上下文
  3. 在主程序中,编写要传递的参数,以及对回调函数进行处理

Prism事件的发布和订阅

可以有多个发布者,也可以有多个订阅者。

一个简单的string类型的消息事件:继承一个泛型类

发送消息:

订阅和取消订阅:

这个有什么用?

可以实现跨模块的一些消息的发布和订阅。

工作单元和仓储:

用工作单元的目的:为了多个仓储之间共享一个上下文,确保数据一致性。

使用仓储repositoty的目的,为了解耦,相当于封装了一层服务。

AutoMapper的作用

实现了把数据传输层实体映射成数据库实体的功能

完整的教学视频来源:

2.WPF样式基础_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值