Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Тип ObservableRecipient является базовым классом для наблюдаемых объектов, которые также выступает в качестве получателей сообщений. Этот класс является расширением ObservableObject , которое также обеспечивает встроенную поддержку использования IMessenger типа.
API платформы:
ObservableRecipient,ObservableObject,IMessenger,WeakReferenceMessengerIRecipient<TMessage>PropertyChangedMessage<T>
Как это работает
Тип ObservableRecipient предназначен для использования в качестве основы для представлений, которые также используют IMessenger функции, так как он обеспечивает встроенную поддержку. В частности:
- Он имеет как конструктор без параметров, так и тот, который принимает
IMessengerэкземпляр, для использования с внедрением зависимостей. Он также предоставляетMessengerсвойство, которое можно использовать для отправки и получения сообщений в режиме просмотра. Если используется конструктор без параметров,WeakReferenceMessenger.Defaultэкземпляр будет назначен свойствуMessenger. - Он предоставляет
IsActiveсвойство для активации и деактивации модели представления. В этом контексте для "активации" означает, что заданный режим представления помечается как используемый, например. он начнет прослушивать зарегистрированные сообщения, выполнять другие операции установки и т. д. Существует два связанных метода иOnActivatedOnDeactivatedвызывается при изменении значения свойства. По умолчанию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