作为 MVVM 和 SOLID 开发的新手,我正在开发一个小型 WPF 应用程序,我意识到我的应用程序在某些方面是非常规的:
- 我的所有模型数据都需要通过轮询(每秒)或使用回调函数(例如使用 Shell Hook 和
Automation
事件)经常刷新。 - 所有刷新的数据都需要立即推送到View。
- View 严格来说是数据的显示;它不会公开任何类型的数据突变功能。
目前我正在使用以下标准 MVVM/DataBinding 解决方案:
- 我的 Model 类单独实现基于计时器的轮询或设置回调以保持其数据最新,并且它们实现
INotifyPropertyChange
接口(interface)以通知订阅者( ViewModel)的所有变化。 - 我的 ViewModel 订阅实例化模型对象的
PropertyChanged
事件。 ViewModel 还实现了INotifyPropertyChange
接口(interface),当它从 Model 收到更改通知时,它会为 View 发出自己的更改通知。 (大多数 ViewModel 属性只是简单地包装相同的模型属性,但最重要的数据(项目集合)被转换为格式化的 HTML 字符串,以在 View 的WebBrowser
控件中使用。) - 我的View 像往常一样绑定(bind)到 ViewModel,并显示更新后的数据。
该应用将使用此设计,但感觉不对。
这些单向显示场景是否有一些已知的开发模式?
特别是:
- 是否建议删除 ViewModel,并公开所有专门为 View 预格式化的模型数据? (没有为这些数据计划其他 View 。)
- 是否可以扩展单个基类或实现一个以某种方式有助于集中轮询/回调/更改通知职责的接口(interface)?
这是未完成/未完成的模型现在的样子:
可以大概看到依赖的当前状态。 (我敢肯定这个模型有很多问题。)
最佳答案
具体情况:
是的,您可以将 MainViewModel 作为 View 的 DataContext,并从模型中取出轮询到服务,VM 可以监听它的事件,例如“ThereWereChangesEvent”,然后更新您的集合(有一个相应地收集“模型的第一个)项目。”
答案 1 实际上也回答了这个问题。编写一个外部服务并使用它。 它可以聚合来自模型的更改通知,并让它们通过同时引发“ThereWereChangesEvent”来传播。
希望这对您有帮助..
关于c# - 需要积极地将刷新数据从模型推送到 View 的 WPF 应用程序的任何特定体系结构解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42837723/