处置静态资源ViewModels

时间:2012-08-04 10:19:13

标签: wpf mvvm mvvm-light

我有一个简单的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将保留在内存中并仍然处理消息。 我希望我能正确解释:)

提前致谢

2 个答案:

答案 0 :(得分:2)

首先,当你想要处理它时,它取决于你。你没说清楚。我首先认为你的意思是“当应用程序关闭时”然后我将使用exit事件。但我对你的陈述感到恼火

  

因为如果我不进行清理,ViewModel将保留在内存中   仍然处理消息。我希望我能正确解释

只有在您想要处理但您的应用程序仍然需要运行时才会发生什么。如果您的应用程序关闭,则内存中没有任何内容,也不再处理任何消息。但是,不依赖于它仍然是一种很好的做法。

因此,如果您的意思是“当申请结束时”这是您的答案。

答案 1 :(得分:0)

有一个解释,即使你进行取消注册和解决方法,Messenger仍然会引起强大的引用。

您的FrameworkElement(“View”)可以在Unloaded发生时调用ViewModel中的Cleanup: