mvvm light Messenger.Default.Register in View codebehind?

В решении BookShelf John Papa , представленном на Mix11 , есть кое-что, что мне кажется немного странным ... Оно использует MVVM паттерн и MVVM Light toolkit ... Все отлично. Единственное , которое я не могу понять , это: В коде of Views он регистрирует пару сообщений , вот его код:

public partial class BookView : Page
{
    public BookView()
    {
        InitializeComponent();
        //btnEdit.SetBinding(Button.IsEnabledProperty, new Binding("User.IsAuthenticated") { Source = Application.Current.Resources["WebContext"] });
        Title = ApplicationStrings.HomePageTitle;
        RegisterMessages();
    }

    private void RegisterMessages()
    {
        Messenger.Default.Register<LaunchEditBookMessage>(this, OnLaunchEditBook);
        Messenger.Default.Register<SavedBookDialogMessage>(this, OnSaveBookDialogMessageReceived);
    }

    private void OnLaunchEditBook(LaunchEditBookMessage msg)
    {
        var editBook = new EditBookWindow();
        editBook.Show();
    }

    private void OnSaveBookDialogMessageReceived(SavedBookDialogMessage msg)
    {
        MessageBox.Show(msg.Content, msg.Caption, msg.Button);
    }
//...

Это бизнес-приложение , если вы переключитесь с этой страницы на другую, а затем вернитесь туда, страница снова создается и продолжает регистрировать для этих сообщений, в результате чего те срабатывают несколько раз ...

Как получается он подписывается на эти сообщения в codebehind вместо ViewModels? это как-то связано с потоком пользовательского интерфейса? ** Это правильная реализация?

Как бы вы отменили регистрацию этих сообщений, если пользователь перешел на другую страницу?

РЕДАКТИРОВАТЬ: ПЕРЕФАКТОРНЫЙ КОД

XAML

<sdk:Page Loaded="Page_Loaded" Unloaded="Page_Unloaded">

КОД ЗА

private void Page_Loaded(object sender, RoutedEventArgs e)
    {
        RegisterMessages();
    }

    private void Page_Unloaded(object sender, RoutedEventArgs e)
    {
        Messenger.Default.Unregister(this);
    }
5
задан JackNova 27 September 2011 в 07:43
поделиться