PRISM + TabControl +验证=疼痛

时间:2015-10-26 10:59:28

标签: c# validation prism tabcontrol idataerrorinfo

在我的应用程序中,我有多个标签的对话框。我正在使用PrismTabControl注册视图。

我想要的是验证整个对话框以禁用/启用保存按钮。

问题:目前我们有一个视图触发的验证。表示每个绑定项都实现IDataErrorInfo接口。显示视图时,绑定会触发界面并在UI上显示和显示错误。 ControlHasError属性设置为true,保存按钮被禁用。

但是在显示视图之前,验证不会被触发。我应该将验证移至ViewModel并自行验证Properties,还是有解决方案来验证TabControl中的非活动视图?

1 个答案:

答案 0 :(得分:1)

没有足够的信息可以解决我的问题,所以我只能猜测。首先,您必须了解TabControl中没有非活动视图。 TabControls可视化树中一次只有一个视图,即选定的选项卡。这意味着其他视图将从可视树中删除,直到它们被选中。但这并不重要,因为验证是通过ViewModel控制的。 ViewModel很可能有一个绑定到Save按钮的Command。此命令应该定义一个CanExecute,返回IDataErrorInfo.Error!= null(表示您没有错误)。您可以在此处检查对象的有效性。如果您有任何错误,则返回false,如果您没有错误,则返回true。挂钩对象的属性更改事件,并调用SaveCommand.RaiseCanExecuteChange方法重新检查按钮的状态。

如果每个视图选项卡都有自己的ViewModel,因此它自己的Save命令,我建议使用CompositeCommand。这真的是一个未知数,因为我不知道你是如何构建对话框,视图或ViewModel的。