我有一个非常标准的视图和视图模型。 INotifyPropertyChanged在vm中使用代理属性实现到各种模型对象(来自EF的实体)的基础数据。
这适用于简单的情况,但是,实体很可能会被应用程序中运行的其他代码更改。由于实体未实现INotifyPropertyChanged,因此在该特定时间显示数据的任何视图都不会反映数据中的更改。
我正在考虑使用某种观察器来包装实体,这些观察器监视所有底层属性的更改,然后vm可以与观察者一起工作,而不是与实体一起工作。然而,这让我觉得需要相当数量的样板代码(以及许多不必要的重复)来首先将实体包装在观察者中,然后再重新包装观察者以在vm中创建代理属性。
这一定是一个常见问题,但我找不到任何真正的整洁解决方案。我在这里错过了什么吗?
答案 0 :(得分:0)
使用Mediator Pattern可能对您有所帮助。它封装了对象如何相互交互。
通过将每个视图模型注册到“调解器”中。单例类,我的视图模型之间有一个链接。这意味着我使调解器类知道的所有视图模型都知道。然后我可以打电话给"通知"介体上的方法,向其发送标识符。
当此通知发出时,介体可以查看具有放置在其他已注册视图模型中的方法上的标识符的属性。如果属性与标识符匹配,则它将运行该方法。
通过谷歌有关实施细节的详细记录。
找到第一个链接: