没有合适的资源?快使用搜索试试~ 我知道了~
首页DevExpress MVVM框架
DevExpress MVVM框架
需积分: 35 89 下载量 29 浏览量
更新于2023-03-16
评论 1
收藏 770KB PDF 举报
这是一个用于DevExpress的MVVM开发框架文档 这是一个用于DevExpress的MVVM开发框架文档 这是一个用于DevExpress的MVVM开发框架文档
资源详情
资源评论
资源推荐
MVVM Framework
它允许您使用单元测试开发灵活的体系结构,这在业务(LoB)应用程序中非常有用。
WPF 平台本身并不完全支持 MVVM 开发。DevExpress 创建了自己的框架,该框架与
DevExpress 控件结合,是设计良好的 MVVM 应用程序的整体解决方案。
1.ViewModels
ViewModel 是 MVVM 应用程序的一部分,负责模型和视图这两个部分之间的交互。
DevExpress MVVM 框架提供了几个基类,您可以使用它们来派生 ViewModel,以便轻松实
现可绑定属性、验证、命令、消费服务,以及实现 ViewModel 之间的交互。DevExpress
MVVM 框架的另一个强大特性是 POCO 机制,它简化并加速了 ViewModel 开发过程。
1. BindableBase
public abstract class BindableBase : object, INotifyPropertyChanged
BindableBase 类实现了 INotifyPropertyChanged 接口,并提供了使用 GetProperty 和
SetProperty 方法轻松实现 bindable 属性的功能。GetProperty and SetProperty 方法的第
一 个 属 性 用 于 返 回 标 识 目 标 属 性 名 的 property , 属 性 名 通 常 包 含 在
BindableBase.GetPropertyName<T>静态方法中。
属性值存储在内部字典中(GetProperty 方法使用该字典根据属性名获取属性值,
SetProperty 方法使用属性名作为键存储属性值)。这种方法简化了代码,并允许在编译和重
命名具有标准 Visual Studio 重构功能的属性时进行代码检查。
SetProperty 方法返回 True 或 False 值,该值指示属性是否已成功更改(如果将相同的
值设置为属性,则 SetProperty 方法返回 False,而更改通知未发送)。一些重载的 SetProperty
方法也使用回调方法作为参数。这个回调在字段被更改之后被调用。
代码片段:
1.普通创建 ViewModel
1. public class ViewModel : BindableBase {
2. public string FirstName {
3. get { return GetProperty(() => FirstName); }
4. set { SetProperty(() => FirstName, value); }
5. }
6. }
2.使用 callback
1. public string FirstName
2. {
3. get { return GetProperty(() => FirstName); }
4. set { SetProperty(() => FirstName, value, OnFirstNameChanged); }
5. }
3.如果您需要手动提高 INotifyPropertyChanged。PropertyChanged 事件针对特定属性,
使用 RaisePropertyChanged/RaisePropertiesChanged 方法。
1. public class ViewModel : BindableBase {
2. public string FullName {
3. get { return string.Format("{0} {1}", FirstName, LastName); }
4. }
5. public string FirstName {
6. get { return GetProperty(() => FirstName); }
7. set { SetProperty(() => FirstName, value, OnFirstNameChanged); }
8. }
9. public string LastName {
10. get { return GetProperty(() => LastName); }
11. set {
12. if(SetProperty(() => LastName, value))
13. RaisePropertyChanged(() => FullName);
14. }
15. }
16. void OnFirstNameChanged() {
17. RaisePropertyChanged(() => FullName);
18. }
19. }
4.在极少数情况下,当属性频繁更新时(由于计算来自 lambda 表达式的属性名和访问字
典存储的属性),应用程序性能可能会恶化。为了适应这些场景,对属性使用存储变量,
1. public class ViewModel : BindableBase {
2. static string Property1Name;
3. static ViewModel() {
4. Property1Name = BindableBase.GetPropertyName(() => new ViewModel
().Property1);
5. }
6.
7. string property1;
8. public string Property1 {
9. get { return property1; }
10. set { SetProperty(ref property1, value, Property1Name); }
11. }
12. }
2. ViewModelBase
ViewModelBase 类是 BindableBase 派生类。它继承 BindableBase 类的特性(例如
GetProperty、SetProperty 和 RaisePropertyChanged/RaisePropertiesChanged 方法),并
提供以下附加功能。
1. 分别为运行时和设计时模式初始化属性
视图模型可能包含需要访问数据库的属性。当您在 Visual Studio designer 中工作时,
视图模型不允许连接到数据库。这会导致设计器出现错误。
在 这 种 情 况 下 , ViewModelBase 类提供 OnInitializeInDesignMode 和
OnInitializeInRuntime 保护的虚拟方法,可以分别重写这些方法来初始化运行时和设计时模
式的属性。
2. public class ViewModel : ViewModelBase {
3. public IEnumerable<Employee> Employees {
4. get { return GetProperty(() => Employees); }
5. private set { SetProperty(() => Employees, value); }
6. }
7. protected override void OnInitializeInDesignMode() {
8. base.OnInitializeInDesignMode();
9. Employees = new List<Employee>() {
10. new Employee() { Name = "Employee 1" },
11. };
12. }
13. protected override void OnInitializeInRuntime() {
14. base.OnInitializeInRuntime();
15. Employees = DatabaseController.GetEmployees();
16. }
17. }
2.访问在视图中注册的服务
ViewModelBase 类实现了维护服务机制的 ISupportServices 接口。ViewModelBase.GetService
方法 employs 于 ISupportServices 接口,允许您访问在视图中注册的服务。
1. <UserControl x:Class="ViewModelBaseSample.View"
2. xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvv
m"
3. xmlns:ViewModels="clr-
namespace:ViewModelBaseSample.ViewModels" ...>
4. <UserControl.DataContext>
5. <ViewModels:ViewModel/>
6. </UserControl.DataContext>
7. <dxmvvm:Interaction.Behaviors>
8. <dxmvvm:MessageBoxService/>
9. </dxmvvm:Interaction.Behaviors>
10. </UserControl>
后台代码:
1. public class ViewModel : ViewModelBase {
2. public IMessageBoxService MessageBoxService { get { return GetService<IM
essageBoxService>(); } }
3. }
3.使用视图模型父子关系。
从 ViewModelBase 继承的视图模型可以通过父子关系相互关联。这是通过在
ViewModelBase 类中实现的 ISupportParentViewModel 接口实现的。在这种情况下,子
ViewModel 可以访问主 ViewModel 中注册的服务。下面的主题包含关于如何设置亲子关系
以 及 使 用 这 种 机 制 可 以 获 得 什 么 好 处 的 更 多 信 息 :ViewModel relationships
(ISupportParentViewModel)。
4.在视图模型之间传递数据
ViewModelBase 类实现了 ISupportParameter 接口,该接口可用于向视图模型传递初始
数据。下面的文档主题描述了这个机制是如何操作的:在 ViewModels (ISupportParameter)之
间传递数据。
5.创建没有命令属性的命令
ViewModelBase 类实现了 ICustomTypeDescriptor 接口,以提供在运行时根据方法(使用命令
属性)自动创建命令属性的功能。
1.传统方式:
1. public class ViewModel : ViewModelBase {
2. public ICommand SaveCommand { get; private set; }
3. public ViewModel() {
4. SaveCommand = new DelegateCommand(Save, CanSave);
剩余15页未读,继续阅读
TW_gjp
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0