2

我为一个相当复杂的 WPF 应用程序继承了一些代码,该应用程序使用 Caliburn.Micro 来实现 MVVM 模式。它使用自动绑定到使用 Caliburn 命名约定的视图模型的视图。视图模型继承自一个实现 INotifyDataErrorInfo 的类,并且 Fluent Validation 用于生成特定于字段的错误。这非常有效,除非在一种情况下,我将用户控件嵌入到多个不同的视图中,并且需要验证该用户控件中的 UI 元素。

嵌入式用户控件有它自己的视图模型,它不实现 INotifyDataErrorInfo。可以说,我们在验证父视图时生成的验证消息不会传播到 UI 进行显示。

我不太确定我需要在这里显示什么代码来说明问题,所以这个问题实际上更具概念性 - 问题是:

我的情况是,我应该在嵌入式用户控件后面的视图模型上实现,还是有其他方法可以在其视图模型上使用嵌套在嵌入式用户控件中的控件的属性名称来使父视图调用 GetErrors()?

我希望这是有道理的——我对 WPF 很陌生!

4

1 回答 1

3

我最终解决了这个问题。问题原来是我有一个单独的视图模型绑定到嵌套视图,并且该视图模型没有从实现 INotifyDataErrorInfo 的类继承。可以这么说,这里的规则似乎是您可以嵌入具有自己的视图模型(数据上下文)的用户控件并且仍然获得验证行为,但是层次结构中的每个视图模型都必须实现 INotifyDataErrorInfo 否则绑定到它们的 UI 元素将不会不会收到错误通知。就我而言,很难看到问题,因为 Caliburn.Micro 和 AutoFac 正在做很多在调试环境中很难看到的自动接线。

于 2014-11-03T14:14:17.640 回答