在WPF中使用带有嵌入式UserControl的INotifyDataErrorInfo(使用Caliburn.Micro)

时间:2014-10-29 16:40:03

标签: c# wpf caliburn.micro fluentvalidation inotifydataerrorinfo

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

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

我不太确定我需要在这里展示哪些代码来说明问题,所以问题更具概念性 - 问题是:

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

我希望这是有道理的 - 我对WPF来说很新!

1 个答案:

答案 0 :(得分:2)

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