MVVM Light отправляет сообщение из ViewModel в View

Я новичок в MVVM Light, и у меня возникли проблемы с использованием Messenger.

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

В моей ViewModel я отправляю сообщение

Messenger.Default.Send(new ClearNewProjectSettingsMessage());

Это мой класс сообщений, я действительно не знаю, что здесь разместить, потому что все находится в моем классе просмотра

public class ClearNewProjectSettingsMessage
{
    public ClearNewProjectSettingsMessage()
    {

    }
}

Регистрирую сообщение в конструкторе Views:

Messenger.Default.Register<ClearNewProjectSettingsMessage>(
            this,
            () => ClearSettings()
);

К сожалению, это не компилируется, поэтому я попробовал это:

Messenger.Default.Register<ClearNewProjectSettingsMessage>(this,ClearSettings);  

Но все равно не работает ..

Это метод, который я хочу вызвать (в представлении):

private void ClearSettings()
{
        passwordBox.Clear();
} 

Спасибо.


person MTA    schedule 16.04.2013    source источник


Ответы (1)


Я никогда не использовал MVVM Light Messenger, но, как и в случае с любым агрегатором событий / шиной сообщений, имеет смысл, чтобы метод обработчика принимал в качестве аргумента объект , который он обрабатывает:

Я проверил исходный код, регистрация выглядит следующим образом:

public virtual void Register<TMessage>(object recipient, Action<TMessage> action)

Имея это в виду, это определение:

private void HandleClearSettings(ClearNewProjectSettingsMessage message)
{
}

следует исправить вашу регистрацию:

Messenger.Default.Register<ClearNewProjectSettingsMessage>(this, HandleClearSettings);  
person Patryk Ćwiek    schedule 16.04.2013
comment
Спасибо за ответ! Я не понимал, что метод обработчика принимает в качестве аргумента объект, который он обрабатывает. Я зарегистрировал сообщение, используя это: Messenger.Default.Send (new ClearNewQCProjectSettingsMessage ()); это нормально? Я действительно не понимаю, как вы регистрируете свое сообщение, потому что у вас нет ничего, что указывает на «ClearNewProjectSettingsMessage», мне нужно разобраться в этом подробнее, не могли бы вы указать мне на какие-либо ресурсы? Благодарность! - person MTA; 16.04.2013
comment
@Manal Вот статья, которую я нашел в Google и вот исходный код, который вы можете проверить в любое время в сомнениях. :) - person Patryk Ćwiek; 16.04.2013