WPF验证(IDataErrorInfo)与ICommand

28 浏览
0 Comments

WPF验证(IDataErrorInfo)与ICommand

我在ViewModel中使用来能够添加/删除集合中的项目等。

我还有属于模型类的验证来验证文本框等。

是否有办法将ViewModel中的ICommand和模型中的验证(Validation)两者结合起来,以便在文本框未通过验证时禁用按钮?我之所以问,是因为ICommand暴露了CanExecute事件,所以我想使用它可能是明智的!

0
0 Comments

WPF Validation (IDataErrorInfo) with ICommand问题的出现的原因是需要实现一个CanExecute方法来返回模型验证的结果,从而在验证失败时禁用按钮。需要确保当验证条件发生变化时(例如绑定属性发生变化),再次调用CanExecute方法。为了实现这一点,可能需要使用更高级的ICommand实现,例如Prism的DelegateCommand。

解决方法是实现一个CanExecute方法来执行模型验证,并在验证失败时返回false。然后,在绑定属性发生变化时,调用CanExecute方法来更新按钮的状态。可以通过使用Prism的DelegateCommand来实现这一点。DelegateCommand是一个实现了ICommand接口的类,它允许在CanExecute方法被调用时重新评估命令的可执行性。

具体的实现步骤如下:

1. 在ViewModel中实现CanExecute方法,用于执行模型验证并返回验证结果。

2. 在XAML中绑定按钮的Command属性到ViewModel中的Command对象。

3. 在XAML中使用CommandManager来监视绑定属性的更改,并在属性更改时重新评估命令的可执行性。

4. 使用Prism的DelegateCommand来实现Command对象,并在CanExecute方法被调用时重新评估命令的可执行性。

这样,当模型验证失败时,按钮将被禁用,从而防止用户执行无效操作。当绑定属性发生变化时,按钮的状态将被更新,以反映当前的验证结果。通过使用Prism的DelegateCommand,可以更方便地实现这一功能,并避免手动调用CanExecute方法来更新按钮的状态。

0