表单验证是MVVM体系中的重要一块。而绑定除了推动 Model-View-ViewModel (MVVM) 模式松散耦合 逻辑、数据 和 UI定义 的关系之外,还为业务数据验证方案提供强大而灵活的支持。WPF 中的数据绑定机制包括多个选项,可用于在创建可编辑视图时校验输入数据的有效性。
常见的表单验证机制有如下几种
Exception验证:通过在某个 Binding 对象上设置 ValidatesOnExceptions 属性,如果源对象属
性设置已修改的值的过程中引发异常,则抛出错误并为该 Binding 设置验证错误。
ValidationRule验证:Binding 类具有一个用于提供 ValidationRule 派生类实例的集合的属性。这些 ValidationRules 需要覆盖某个 Validate 方法,该方法由 Binding 在每次绑定 控件中的数据发生更改时进行调用。如果 Validate 方法返回无效的 ValidationResult 对象,则将为该 Binding 设置验证错误。
IDataErrorInfo验证:通过在绑定数据源对象上实现 IDataErrorInfo 接口并在 Binding 对象上设置ValidatesOnDataErrors 属性,Binding 将调用从绑定数据源对象公开的 IDataErrorInfo API。 如果从这些属性调用返回非 null 或非空字符串,则将为该 Binding 设置验证错误。
验证交互的关系模式如图:
我们在使用 WPF 中的数据绑定来呈现业务数据时,通常会使用 Binding 对象在目标控件的单个属
性与数据源对象属性之间提供数据管道。
如果要使得绑定验证有效,首先需要进行 TwoWay 数据绑定。这表明,除了从源属性流向目标属性以
进行显示的数据之外,编辑过的数据也会从目标流向源。
这就是伟大的双向数据绑定的精髓,所以在MVVM中做数据校验,会容易的多。
当 TwoWay 数据绑定中输入或修改数据时,将启动以下工作流:
绑定目标向绑定源发送数据更新的请求,而绑定源则对数据进行验证,并根据不同的验证机制进行反
馈。
1、Exception 验证:
正如说明中描述的那样,在具有绑定关系的源字段模型上做验证异常的引发并抛出,在View中的
Xaml对象上设置 ExceptionValidationRule 属性,响应捕获异常并显示。
2、ValidationRule 验证:通过继承ValidationRule 抽象类,并重写他的Validate方法来扩展编写我们需要的验证类。该验证类可以直接使用在我们需要验证的属性。
说明:相对来说,这种方式是比较不错的,独立性、复用性都很好,从松散耦合角度来说也是比较恰当的。可以预先写好一系列的验证规则类,视图编码人员可以根据需求直接使用这些验证规 则服务端无需额外的处理。 但是仍然有缺点,扩展性差,如果需要个性化反馈消息也需要额外扩展。不符合日益丰富的前端验证需求。
3、IDataErrorInfo 验证:
3.1、在绑定数据源对象上实现 IDataErrorInfo 接口
3.2、在 Binding 对象上设置 ValidatesOnDataErrors 属性 Binding 将调用从绑定数据源对象公开的 IDataErrorInfo API。如果从这些属性调用返回非 null 或非空字符串,则将为该 Binding 设置验证错误。
利用 IDataErrorInfo 的好处是它可用于轻松地处理交叉耦合属性。但也具有一个很大的弊端:
索引器的实现通常会导致较大的 switch-case 语句(对象中的每个属性名称都对应于一种情况),
必须基于字符串进行切换和匹配,并返回指示错误的字符串。而且,在对象上设置属性值之前,不会调用 IDataErrorInfo 的实现。为了避免出现大量的 switch-case,并且将校验逻辑进行分离提高代码复用,将验证规则和验证信息独立化于于每个模型对象中, 使用DataAnnotations 无疑是最好的的方案 。
表单验证是MVVM体系中的重要一块。而绑定除了推动 Model-View-ViewModel (MVVM) 模式松散耦合 逻辑、数据 和 UI定义 的关系之外,还为业务数据验证方案提供强大而灵活的支持。WPF 中的数据绑定机制包括多个选项,可用于在创建可编辑视图时校验输入数据的有效性。常见的表单验证机制有如下几种Exception验证:通过在某个 Binding 对象上设置 ValidatesOnExceptions 属性,如果源对象属性设置已修改的值的过程中引发异常,则抛出错误并为该 Binding
表单验证
是
MVVM
体系中的重要一块。而
绑定
除了推动Model-View-ViewModel (
MVVM
) 模式松散耦合逻辑、数据 和 UI定义 的关系之外,还为业务数据验证方案提供强大而灵活的支持。
WPF 中的数据
绑定
机制包括多个选项,可用于在创建可编辑视图时校验输入数据的有效性。
常见的
表单验证
机制有如下几种:
Exception 验证
...
1、Messager交互结构和消息类型
衔接上篇,Messeger是信使的意思,顾名思义,他的目是用于View和ViewModel 以及 ViewModel和ViewModel 之间的消息通知和接收。
Messenger类用于
应用
程序的通信,接受者只能接受注册的消息类型,另外目标类型可以被指定,用Send<TMessage, TTarget>(TMessage message)实现...
表单验证
是
MVVM
体系中的重要一块。而
绑定
除了推动Model-View-ViewModel (
MVVM
) 模式松散耦合逻辑、数据 和 UI定义 的关系之外,还为业务数据验证方案提供强大而灵活的支持。
WPF 中的数据
绑定
机制包括多个选项,可用于在创建可编辑视图时校验输入数据的有效性。
常见的
表单验证
机制有如下几种:
Exception 验证
通过...
在
MVVM
Light
框架中,事件是WPF
应用
程序中UI与后台代码进行交互的最主要方式,与传统方式不同,
mvvm
中主要通过
绑定
到命令来进行事件的处理,
因此要了解
mvvm
中处理事件的方式,就必须先熟悉命令的工作原理。
RelayCommand命令: WPF命令是通过实现 ICommand 接口创建的。 ICommand 公开了两个方法(Execute 及 CanExecute)和...
已经很久没有写系列文章了,上一次是2012年写的HTLM5系列,想想我们应该是较早一批使用HTML5做项目的人。
相比我当时动不动100+的粉丝增长和两天3000+的阅读量,
MVVM
Light
只能算小众技术了,也是因为她小众,才更具意义,不希望有人跟我一样网上找案例找半天。
写的初衷也是希望同项目组的同事能更好的融入和接收已有项目。其中两篇《DispatchHelper在多线程和调度中...
在
MVVM
Light
框架中,事件是WPF
应用
程序中UI与后台代码进行交互的最主要方式,与传统方式不同,
mvvm
中主要通过
绑定
到命令来进行事件的处理,因此要了解
mvvm
中处理事件的方式,就必须先熟悉命令的工作原理。
RelayCommand命令:
WPF命令是通过实现 ICommand 接口创建的。 ICommand 公开了两个方法(Execute 及
CanExecute)和一个事件(CanExecuteChanged)。
Execute方法 :执行与命令关联的操作
CanExecute方法: 确定是否可
本文是翻译大牛Josh Smith的文章,WPF
Apps With The Model-View-ViewModel Design Pattern,译者水平有限,如有什么问题请看原文,或者与译者讨论(非常乐意与你讨论)。
本文讨论的内容:
WPF与设计模式
MVP模式
对WPF来说为什么
MVVM
是更好的选择
用
MVVM
构建WPF程序
本文涉及的技术:
一、
MVVM
和
MVVM
Light
介绍
(1)
MVVM
是Model-View-ViewModel的简写。类似于目前比较流行的MVC、MVP设计模式,主要目的是 为了分离视图(View)和模型(Model)的耦合。 它是一种极度优秀的设计模式,但并非框架级别的东西,由MVP(Model-View-Presenter)模式与 WPF结合的
应用
方式时发展演变过来的一种新型架构。 立足于原有MVP框架并且把WPF的新特性糅合进去,以应对PC端开发日益复杂的需求变化。
(2)
MVVM
模式和MVC模式一样,主要目的是
MVVM
Light
是一个开源的
MVVM
(Model-View-ViewModel) 框架,用于开发 Windows 平台的
应用
程序。它的主要优点在于简洁易用、轻量级,支持 WPF、Silver
light
、Windows Phone、Windows 8/8.1、Windows 10 UWP 等平台。
下面是一个简单的
MVVM
Light
使用教程:
1. 首先,安装
MVVM
Light
框架。可以通过 NuGet 包管理器安装,命令如下:
Install-Package
Mvvm
Light
2. 在项目中添加一个 ViewModel 类。这个类会
绑定
到 View 上。
3. 编写 View 的 XAML 代码。在根元素上添加 DataContext 属性
绑定
到 ViewModel。
4. 编写 ViewModel 类中的逻辑代码。这些代码会更新 View 的状态。
5. 在 View 的 XAML 代码中添加
绑定
。例如,将一个文本框的 Text 属性
绑定
到 ViewModel 中的一个属性上。
6. 在 ViewModel 中使用命令来处理 View 上的用户交互。
7. 按照需要使用其他
MVVM
Light
的功能,例如消息传递、导航、本地化等。
最后,我需要提醒你
MVVM
是一种模式,不同的框架可能有不同的实现,每种框架都有它的优缺点,需要根据自己的需求来选择合适的框架.
CSDN-Ada助手:
Java的异常处理机制
CHQIUU:
Java的运算符
water___Wang:
Java的介绍和eclipse基本使用
water___Wang: