我有一个简单的ViewModel
public class TestViewModel : ViewModelBase, IDisposable
{
public TestViewModel()
{
Messenger.Default.Register<string>(this, MessageHandling);
}
public void MessageHandling(string message)
{
System.Windows.MessageBox.Show(message);
}
public override void Cleanup()
{
Messenger.Default.Unregister(this);
base.Cleanup();
}
}
我在我的XAML中使用它:
<Window.Resources>
<ResourceDictionary>
<vm:TestViewModel x:Key="ViewModel"></vm:TestViewModel>
</ResourceDictionary>
</Window.Resources>
<Grid DataContext="{Binding Source={StaticResource ViewModel}}">
</Grid>
任何人都可以帮助我们处理这个ViewModel,处理我的意思是我应该订阅哪个事件来调用VM方法清理?因为如果我不进行清理,ViewModel将保留在内存中并仍然处理消息。 我希望我能正确解释:)
提前致谢
答案 0 :(得分:2)
首先,当你想要处理它时,它取决于你。你没说清楚。我首先认为你的意思是“当应用程序关闭时”然后我将使用exit事件。但我对你的陈述感到恼火
因为如果我不进行清理,ViewModel将保留在内存中 仍然处理消息。我希望我能正确解释
只有在您想要处理但您的应用程序仍然需要运行时才会发生什么。如果您的应用程序关闭,则内存中没有任何内容,也不再处理任何消息。但是,不依赖于它仍然是一种很好的做法。
因此,如果您的意思是“当申请结束时”这是您的答案。
答案 1 :(得分:0)
有一个解释,即使你进行取消注册和解决方法,Messenger仍然会引起强大的引用。
您的FrameworkElement(“View”)可以在Unloaded发生时调用ViewModel中的Cleanup: