MVVMLight сообщение запускается несколько раз в приложении WP7 - PullRequest
2 голосов
/ 01 ноября 2010

Я новичок в 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 ... Любые советы приветствуются ...

1 Ответ

0 голосов
/ 01 ноября 2010

Представление создается и уничтожается при навигации по приложению. Следовательно, в конструкторе представления AboutPage представление регистрируется для сообщения каждый раз, когда оно создается.

Лучший подход - настроить регистрацию в конструкторе ViewModel, использовать ViewModelLocator и связать данные View с ViewModel. ViewModel создается один раз и используется на протяжении всей жизни приложения. Jonas Follesoe's TicketsNorway - хорошее приложение WP7 для изучения MVVMLight, вы можете найти, что класс MVVMLight Messenger используется очень хорошо.

HTH, индифромоз

...