在我的应用程序中,我有多个标签的对话框。我正在使用Prism
向TabControl
注册视图。
我想要的是验证整个对话框以禁用/启用保存按钮。
问题:目前我们有一个视图触发的验证。表示每个绑定项都实现IDataErrorInfo
接口。显示视图时,绑定会触发界面并在UI上显示和显示错误。 Control
将HasError
属性设置为true,保存按钮被禁用。
但是在显示视图之前,验证不会被触发。我应该将验证移至ViewModel
并自行验证Properties
,还是有解决方案来验证TabControl
中的非活动视图?
答案 0 :(得分:1)
没有足够的信息可以解决我的问题,所以我只能猜测。首先,您必须了解TabControl中没有非活动视图。 TabControls可视化树中一次只有一个视图,即选定的选项卡。这意味着其他视图将从可视树中删除,直到它们被选中。但这并不重要,因为验证是通过ViewModel控制的。 ViewModel很可能有一个绑定到Save按钮的Command。此命令应该定义一个CanExecute,返回IDataErrorInfo.Error!= null(表示您没有错误)。您可以在此处检查对象的有效性。如果您有任何错误,则返回false,如果您没有错误,则返回true。挂钩对象的属性更改事件,并调用SaveCommand.RaiseCanExecuteChange方法重新检查按钮的状态。
如果每个视图选项卡都有自己的ViewModel,因此它自己的Save命令,我建议使用CompositeCommand。这真的是一个未知数,因为我不知道你是如何构建对话框,视图或ViewModel的。