C# 关闭和清理ViewModel中的视图
我的应用程序使用著名的IDialogService的变体创建了许多子视图。现在,我需要在特定事件或一组事件发生时,以编程方式关闭这些视图 首先,我应该如何最好地揭示观点的封闭方法,记住C# 关闭和清理ViewModel中的视图,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我的应用程序使用著名的IDialogService的变体创建了许多子视图。现在,我需要在特定事件或一组事件发生时,以编程方式关闭这些视图 首先,我应该如何最好地揭示观点的封闭方法,记住 必须释放视图的DataContext(ViewModel)并 必须为每个要关闭的视图调用View.Dispatcher.InvokeShutdown 到目前为止,我有一个附加的行为组合来连接到结束事件中以处理清理和ViewModel上的一个操作,如 vm.OnCloseAction = ()=> view.
vm.OnCloseAction = ()=> view.Close();
处理从ViewModel实际关闭视图的步骤
不过,我觉得这并不特别优雅。有人有其他想法或替代方法吗?一个想法是使用您正在使用的任何消息传递框架(如我使用的MVVM Light中的Messenger),设置一条结束消息(或类似的内容),并在结束消息的“关闭”注册表中设置任何需要执行的操作 我正在使用EventAggregator做这类事情,但是你会把订阅代码放在哪里呢?我不确定我是否完全理解你的场景,但是订阅代码可以放在任何地方,对吗?如果您有需要清理的视图,请订阅代码隐藏。如果您有需要单独清理的viewmodels,请在那里订阅。eventaggregator使它保持松散耦合,因此在何处使用它并不重要。