Поделиться через


ObservableRecipient

Тип 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 в действии.
  • Дополнительные примеры можно найти в модульных тестах.