c# – 将Silverlight MVVM与Prism / Unity一起使用,并需要检测何时关闭视图

我正在使用MVVM(Model-View-ViewModel)模式编写应用程序,并利用Microsoft P& P团队的Prism和Unity位.

我有一个包含项目列表的视图.这些项包含在ViewModel中的ObservableCollection中,View中的列表框是数据绑定的(ViewModel设置为View的DataContext).在ViewModel中,我有一个运行的计时器,每30秒触发一次服务器轮询以获取新数据.当数据返回时,我将其封送到UI线程并将新数据添加到ObservableCollection.一切都很好.

我遇到的问题是我需要在视图关闭时停止计时器.我不确定在这里要注意什么事件. Unity中有什么东西会告诉我该区域的视图何时被替换?是否有一个最适合从视图中使用的事件,并且可能将该事件(或外观)传递给ModelView?根据P& P示例,我的视图是一个UserControl.我找不到“卸载”事件,也没有覆盖的方法.

我已经在考虑编写自己的服务来处理视图更改(RegionManager的某种外观),并且可能只是在我的Views上实现一个公共接口来进行清理,或者在从视图中删除它们时对它们实现IDisposable.但是,如果在Corelight框架核心或Unity / Prism的范围内有一个干净的方法,我宁愿采取这种方式.

编辑 – 答案:

我最后选择了一个与我正在为我的解决方案做的最接近的答案来标记Anderson Imes的答案.但实际上,我正在使用来自PL和GraemeF的部件,并且每个人都投票.这对我来说是一个很好的回应,因为它让我对这些区域有了更好的了解,给了我另一个框架来查看,并验证我可能正在通过实现服务来处理视图更改而不仅仅是调用进入RegionManager.

解决方法:

我有这个确切的问题,最终基本上为此创建了一个接口:

public IApplicationEvents
{
     void OnClose();
}

我集中了我的关闭视图代码,基本上只是在删除视图之前查找此接口.如果它在那里,我可以调用它(我检查了View本身以及DataContext属性,如果它是UIElement).

我使用附加属性和EventAggregator对它进行了一些保护,但这是基本的想法并且运行良好.

当您查看关闭时,您需要关闭它,特别是如果您正在使用DispatcherTimer(如您所愿).如果不这样做,这会导致一些非常糟糕的内存泄漏.

上一篇:c# – WPF,MVVM和PRISM – 为此对象定义的无参数构造函数


下一篇:[SQL Server]利用索引改善sql语句