Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Тип ObservableRecipient является базовым классом для наблюдаемых объектов, которые также выступает в качестве получателей сообщений. Этот класс является расширением ObservableObject , которое также обеспечивает встроенную поддержку использования IMessenger типа.
API платформы:
ObservableRecipient,ObservableObject,IMessenger,WeakReferenceMessengerIRecipient<TMessage>PropertyChangedMessage<T>
Принцип работы
Тип ObservableRecipient предназначен для использования в качестве базового типа для моделей представления, которые также используют возможности IMessenger, так как он обеспечивает их встроенную поддержку. В частности:
- Предусмотрены как конструктор без параметров, так и конструктор, принимающий экземпляр
IMessenger, для использования при внедрении зависимостей. Он также предоставляетMessengerсвойство, которое можно использовать для отправки и получения сообщений в режиме просмотра. Если используется конструктор без параметров,WeakReferenceMessenger.Defaultэкземпляр будет назначен свойствуMessenger. - Предоставляется свойство
IsActiveдля активации/деактивации модели представления. В этом контексте «активировать» означает, что данная модель представления помечается как используемая, так что, например, она начинает прослушивать зарегистрированные сообщения, выполнять другие операции инициализации и т. д. Существуют два связанных метода,OnActivatedиOnDeactivated, которые вызываются при изменении значения свойства. По умолчаниюOnDeactivatedавтоматически отменяет регистрацию текущего экземпляра для всех зарегистрированных сообщений. Для получения наилучших результатов и предотвращения утечки памяти рекомендуется использоватьOnActivatedдля регистрации в сообщениях и дляOnDeactivatedвыполнения операций очистки. Этот шаблон позволяет включить или отключить модель представления несколько раз, а безопасно собирать без риска утечки памяти при каждом отключении. По умолчаниюOnActivatedавтоматически регистрирует все обработчики сообщений, определённые с помощью интерфейсаIRecipient<TMessage>. - Он предоставляет метод
Broadcast<T>(T, T, string), который отправляет сообщениеPropertyChangedMessage<T>через экземплярIMessenger, доступный через свойствоMessenger. Это можно использовать для удобного уведомления об изменениях свойств ViewModel без необходимости вручную получать экземплярMessengerдля этого. Этот метод используется в перегруженных версиях различных методовSetProperty, которые имеют дополнительное свойствоbool broadcast, указывающее, следует ли также отправлять сообщение.
Вот пример модели представления, которая получает сообщения LoggedInUserRequestMessage, когда активна:
public class MyViewModel : ObservableRecipient, IRecipient<LoggedInUserRequestMessage>
{
public void Receive(LoggedInUserRequestMessage message)
{
// Handle the message here
}
}
В приведенном выше OnActivated примере автоматически регистрирует экземпляр в качестве получателя LoggedInUserRequestMessage сообщений, используя этот метод в качестве вызываемого действия.
IRecipient<TMessage> Использование интерфейса не является обязательным, и регистрация также может выполняться вручную (даже с помощью встроенного лямбда-выражения):
public class MyViewModel : ObservableRecipient
{
protected override void OnActivated()
{
// Using a method group...
Messenger.Register<MyViewModel, LoggedInUserRequestMessage>(this, (r, m) => r.Receive(m));
// ...or a lambda expression
Messenger.Register<MyViewModel, LoggedInUserRequestMessage>(this, (r, m) =>
{
// Handle the message here
});
}
private void Receive(LoggedInUserRequestMessage message)
{
// Handle the message here
}
}
Примеры
- Ознакомьтесь с примером приложения (для нескольких платформ пользовательского интерфейса), чтобы просмотреть набор средств MVVM в действии.
- Дополнительные примеры можно найти в модульных тестах.
MVVM Toolkit