Я новичок в MVVMLight и начал использовать его в своем приложении WP7. У меня есть View / страница, которая регистрируется для MessageDialogs, а затем моя виртуальная машина отправляет сообщение, чтобы показать его. Это прекрасно работает. Однако, когда вы вернетесь к предыдущему экрану (с кнопкой возврата WP7), а затем снова войдете в страницу (с помощью пункта меню AppBar), тогда сообщение сработает дважды (и увеличивается при каждом просмотре страницы). Я предполагаю, что представление регистрируется каждый раз, а старые версии подписываются на сообщение, но я не уверен, как оно должно работать.
Я пытался вызвать VM.Cleanup в моем событии NavigatedFrom, чтобы гарантировать, что старые сообщения не регистрируются, когда они покидают страницу, но это не помогло. Вот мой код:
Вид:
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 ... Любые советы приветствуются ...