c# - 需要积极地将刷新数据从模型推送到 View 的 WPF 应用程序的任何特定体系结构解决方案?

标签 c# wpf design-patterns mvvm eventaggregator

作为 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)?

这是未完成/未完成的模型现在的样子:

可以大概看到依赖的当前状态。 (我敢肯定这个模型有很多问题。)

enter image description here

最佳答案

具体情况:

  1. 是的,您可以将 MainViewModel 作为 View 的 DataContext,并从模型中取出轮询到服务,VM 可以监听它的事件,例如“ThereWereChangesEvent”,然后更新您的集合(有一个相应地收集“模型的第一个)项目。”

  2. 答案 1 实际上也回答了这个问题。编写一个外部服务并使用它。 它可以聚合来自模型的更改通知,并让它们通过同时引发“ThereWereChangesEvent”来传播。

希望这对您有帮助..

关于c# - 需要积极地将刷新数据从模型推送到 View 的 WPF 应用程序的任何特定体系结构解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42837723/

相关文章:

c# - SQL 查询后重定向页面

c# - 在运行 HTTPS 的应用程序中重定向 URI 作为 HTTP 而不是 HTTPS 发送

c# - UWP 的 DrawingVisual 等效项

WPF:滚动项控件内容固定 header

c# - 将 WPF Button CommandParameter 绑定(bind)到 DataTemplate 中的 Button 本身

java - 在演示者之间传递控件/值,GWT 模型 View 演示者?

scala - 哪种GOF设计模式具有完全不同的实现(java与Scala)

c# - 查找特定时间范围内的时间发生和持续时间

c# - 我如何在 c# 中创建 [experimental] 标签,它会引发编译器警告

asp.net-mvc - 我的 ASP.NET MVC 应用程序贫血