在WP7应用程序中多次触发MVVMLight消息

时间:2010-11-01 01:38:53

标签: silverlight windows-phone-7 mvvm-light

我是MVVMLight的新手,并已开始在我的WP7应用中使用它。我有一个View /页面,它注册MessageDialogs然后我的VM发送消息来显示它。这非常有效。但是,当您返回上一个屏幕(使用WP7后退按钮)然后再次进入页面(使用AppBar菜单项)时,该消息将触发两次(并在每次查看页面时递增)。我认为View每次注册都会注册,旧版本订阅邮件,但我不确定它应该如何工作。

我尝试在NavigatedFrom事件中调用VM.Cleanup,以确保旧邮件在离开页面时未注册,但这没有帮助。这是我的代码:

查看:

public AboutPage()
{
    InitializeComponent();

    Messenger.Default.Register<DialogMessage>(this, msg => { var result = MessageBox.Show(msg.Content, msg.Caption, msg.Button); });
}

    protected override void OnNavigatedFrom(NavigationEventArgs args)
    {
        ViewModelLocator.AboutViewModelStatic.Cleanup();
        base.OnNavigatedFrom(args);
    }

AboutViewModel :(代码被命令触发)

        var message = new DialogMessage("Why does this fire multiple times?", DialogMessageCallback) { Button = MessageBoxButton.OK, Caption = "" };
        Messenger.Default.Send(message);

这就是它的全部内容,但是每次你来到这个页面它都会再次触发......我认为它与Cleanup有关但我不确定它应该如何在WP7中运行...任何提示赞赏...

1 个答案:

答案 0 :(得分:0)

创建了一个视图&amp;在浏览应用程序时销毁。因此,在AboutPage视图的构造函数中,视图在每次创建时都会注册该消息。

更好的方法是在ViewModel的构造函数中设置注册,使用ViewModelLocator并将View数据绑定到ViewModel。 ViewModel只创建一次,并在应用程序的整个生命周期中使用。 Jonas Follesoe's FlightsNorway是了解MVVMLight的WP7应用程序,你可以很好地找到MVVMLight Messenger类。

HTH,indyfromoz