【发布时间】:2010-12-17 11:58:28
【问题描述】:
我正在使用 MVVM(模型-视图-视图模型)模式编写应用程序,并利用 Microsoft P&P 团队的 Prism 和 Unity 位。
我有一个包含项目列表的视图。这些项目包含在 ViewModel 中的 ObservableCollection 中,View 中的列表框数据绑定到该 ViewModel(ViewModel 设置为 View 的 DataContext)。在 ViewModel 中,我运行了一个计时器,它每 30 秒触发一次服务器轮询以获取新数据。当数据返回时,我将其编组到 UI 线程并将新数据添加到 ObservableCollection。这一切都很好。
我遇到的问题是我需要在视图关闭时停止计时器。我不确定要在这里观看什么活动。 Unity 中有什么东西会告诉我该区域的视图何时被替换?是否有一个事件最适合从视图中使用,并且可能将该事件(或外观)传递给 ModelView? My View 是每个 P&P 示例的 UserControl。我找不到“卸载”事件,也找不到覆盖的方法。
我已经在考虑编写自己的服务来处理视图更改(RegionManager 的某种外观),并且可能只是在我的视图上实现一个公共接口来进行清理或在它们从视图中删除时实现 IDisposable看法。但是,如果在核心 Silverlight 框架或 Unity/Prism 的范围内有一种干净的方式来做到这一点,我更愿意走这条路。
编辑 - 答案:
我最终只是通过选择最接近我为我的解决方案所做的事情来标记安德森艾姆斯的答案。但实际上,我也使用了来自 PL 和 GraemeF 的部分,并且对每个人都投了赞成票。这对我来说是一个很好的回应,因为它让我对区域有了更好的了解,给了我另一个框架来查看,并验证了我可能正在走正确的道路,实现一个服务来处理视图更改,而不是仅仅调用进入 RegionManager。
【问题讨论】:
标签: c# silverlight mvvm prism