代码之家  ›  专栏  ›  技术社区  ›  Jason Jackson

使用带Prism/Unity的Silverlight MVVM,需要检测视图何时关闭

  •  4
  • Jason Jackson  · 技术社区  · 16 年前

    我正在使用MVVM(Model-View-ViewModel)模式编写一个应用程序,并且正在利用微软P&P队。

    我有一个项目列表视图。这些项与ViewModel中的ObservableCollection一起包含,视图中的列表框被数据绑定到该ViewModel(ViewModel被设置为视图的DataContext)。在ViewModel中,我运行了一个计时器,每隔30秒对服务器进行一次新数据轮询。当数据返回时,我将其封送到UI线程,并将新数据添加到ObservableCollection。这一切都非常有效。

    我的问题是,当视图关闭时,我需要计时器停止。我不知道在这里看什么比赛。当这个地区的观点被取代的时候,团结中是否有什么东西能告诉我?是否有一个事件最适合从视图中进行此操作,并可能将该事件(或外观)传递到ModelView?我的观点是每个P&P示例。我找不到“卸载”事件,也找不到可重写的方法。

    编辑-回答:

    3 回复  |  直到 16 年前
        1
  •  1
  •   Anderson Imes    16 年前

    我遇到了这个问题,最终基本上为它创建了一个接口:

    public IApplicationEvents
    {
         void OnClose();
    }
    

    我集中了我的close view代码,基本上只是在删除视图之前寻找这个界面。如果它在那里,我可以调用它(我检查了视图本身,如果它是UIElement,还检查了DataContext属性)。

    我使用了一个附加属性和EventAggregator对它进行了一些修饰,但这是基本思想,而且效果很好。

    当视图关闭时,您需要关闭它是正确的,特别是当您使用Dispatchermer时(您应该这样做)。如果不这样做,这会导致一些非常糟糕的内存泄漏。

        2
  •  3
  •   PL.    16 年前

    RegionActiveAwareBehavior ):

    区域活动性行为 负责通知视图是活动视图还是非活动视图。视图必须实现 以接收这些更改通知。此活动感知通知是视图的单向通知;视图不能通过更改上的active属性来影响其活动状态 接口。

        3
  •  2
  •   GraemeF    16 年前

    Caliburn 用它的 IPresenter Component Model 与棱镜配合使用效果良好。您将实现 IPresenter 接口(或更可能使用其中一个基类),并在中停止计时器 OnShutdown 和/或 OnDeactivate