我是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中运行...任何提示赞赏...
答案 0 :(得分:0)
创建了一个视图&amp;在浏览应用程序时销毁。因此,在AboutPage视图的构造函数中,视图在每次创建时都会注册该消息。
更好的方法是在ViewModel的构造函数中设置注册,使用ViewModelLocator并将View数据绑定到ViewModel。 ViewModel只创建一次,并在应用程序的整个生命周期中使用。 Jonas Follesoe's FlightsNorway是了解MVVMLight的WP7应用程序,你可以很好地找到MVVMLight Messenger类。
HTH,indyfromoz