2012-06-22 42 views
3

我的应用程序使用着名的IDialogService的变体创建了许多子视图。我现在有一个要求,可以在发生特定事件或一组事件时,以程序化的方式关闭这些视图。关闭并清理ViewModel的视图

首先,如何更好,我应该揭露意见Close方法,铭记

  1. 视图的DataContext的(视图模型)已被布置和
  2. View.Dispatcher.InvokeShutdown必须调用每个正在关闭的视图。

到目前为止,我有附加的行为的混合物挂接到Closing事件处理清理和像

vm.OnCloseAction =()=> view.Close(); 

在视图模型的行动,以实际处理关闭从视图模型视图。

虽然这对我来说并不特别优雅。有没有人有任何其他想法或替代方法?

回答

3

一个想法是使用您使用的任何消息框架(比如我使用的MVVM Light中的Messenger),设置关闭消息(或类似的东西)并且有任何需要做的事情关闭的东西注册该关闭消息。

+1

我使用EventAggregator的那种事情,但你会在那里把订阅代码? –

+1

我不确定我完全了解您的情况,但订阅代码可能会在任何地方出现,对吧?如果您有需要清理的视图,请在代码隐藏中订阅。如果你有需要单独清理的viewmodels,请在那里订阅。 eventaggregator使它保持松散耦合,所以在使用它的地方它并不重要。 – Tim