1

我已经为使用Caliburn.Micro实现MVVM模式的相当复杂的WPF应用程序继承了一些代码。它使用自动绑定的视图来查看使用Caliburn命名约定的模型。视图模型从实现INotifyDataErrorInfo的类继承,Fluent验证用于生成特定于字段的错误。这完美地工作,除了我有一个用户控件嵌入到几个不同视图中的一个场景中,并且该用户控件中的UI元素需要验证。在WPF中使用带有嵌入式UserControl的INotifyDataErrorInfo(使用Caliburn.Micro)

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

我不能肯定我需要什么样的代码显示在这里来说明问题,所以这个问题是比较实在的概念 - 问题是:

林我的方案,我应该在视图上执行模型背后的嵌入式用户控件,还是有一些其他方法来使父视图调用GetErrors()在它的视图模型上嵌入用户控件嵌套控件的属性名称?

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

回答

1

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