Поиск…


Вступление

Xamarin.Forms имеет встроенный механизм обмена сообщениями для продвижения развязанного кода. Таким образом, модели просмотра и другие компоненты не должны знать друг друга. Они могут общаться по простому договору обмена сообщениями.

Там в основном два основных компонента для использования MessagingCenter .

Подписаться ; прослушивать сообщения с определенной подписью (договор) и выполнять код при получении сообщения. Сообщение может иметь несколько подписчиков.

Отправить ; отправка сообщения для подписчиков.

Простой пример

Здесь мы увидим простой пример использования MessagingCenter в Xamarin.Forms.

Во-первых, давайте посмотрим на подписку на сообщение. В модели FooMessaging мы подписываемся на сообщение, поступающее из MainPage . Сообщение должно быть «Привет», и когда мы его получим, мы регистрируем обработчик, который устанавливает свойство Greeting . Наконец, this означает, что текущий экземпляр FooMessaging регистрируется для этого сообщения.

public class FooMessaging
{
    public string Greeting { get; set; }

    public FooMessaging()
    {
        MessagingCenter.Subscribe<MainPage> (this, "Hi", (sender) => {
            this.Greeting = "Hi there!";
        });
    }
}

Чтобы отправить сообщение, запускающее эту функцию, нам нужно иметь страницу под названием MainPage и реализовать код, как показано ниже.

public class MainPage : Page
{
    private void OnButtonClick(object sender, EventArgs args)
    {
        MessagingCenter.Send<MainPage> (this, "Hi");
    }
}

В нашей MainPage у нас есть кнопка с обработчиком, который отправляет сообщение. this должен быть экземпляр MainPage .

Передача аргументов

Вы также можете передавать аргументы с сообщением для работы.

Мы будем использовать классифицированные из нашего предыдущего примера и расширять их. В принимающей части, прямо за вызовом метода Subscribe добавьте тип аргумента, который вы ожидаете. Также убедитесь, что вы также объявляете аргументы в подписи обработчика.

public class FooMessaging
{
    public string Greeting { get; set; }

    public FooMessaging()
    {
        MessagingCenter.Subscribe<MainPage, string> (this, "Hi", (sender, arg) => {
            this.Greeting = arg;
        });
    }
}

При отправке сообщения обязательно укажите значение аргумента. Кроме того, здесь вы добавляете тип прямо за методом Send и добавляете значение аргумента.

public class MainPage : Page
{
    private void OnButtonClick(object sender, EventArgs args)
    {
        MessagingCenter.Send<MainPage, string> (this, "Hi", "Hi there!");
    }
}

В этом примере используется простая строка, но вы также можете использовать любые другие (сложные) объекты.

Отказ от подписки

Когда вам больше не нужно получать сообщения, вы можете просто отказаться от подписки. Вы можете сделать это следующим образом:

MessagingCenter.Unsubscribe<MainPage> (this, "Hi");

Когда вы предоставляете аргументы, вы должны отказаться от подписки на полную подпись, например:

MessagingCenter.Unsubscribe<MainPage, string> (this, "Hi");



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow