PRISM + TabControl + 验证 = 痛苦

PRISM + TabControl + Validation = Pain

在我的应用程序中,我有多个选项卡的对话框。我正在使用 PrismTabControl.

注册视图

我想要的是对 diable/enable 保存按钮的整个对话框进行验证。

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

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

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

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