Метод подписки на MessageCenter не происходит - PullRequest
0 голосов
/ 30 марта 2020

Я никогда раньше не работал с Центром сообщений и, возможно, допускаю некоторые нелепые ошибки при передаче сообщений между приложениями. Я пытаюсь отправить сообщение из Xamarin. Android в Xamarin.Forms.

Xamarin. Android код проекта:

MessagingCenter.Send(Xamarin.Forms.Application.Current, "MessageReceived", "new message");

Xamarin. Forms:

public partial class App : Application
{

    public App()
    {

        InitializeComponent();

        MainPage = (new MasterDetailPage()
        {
            Master = new MenuPage { Title = "Title" },
            Detail = new NavigationPage(new XxmsApp.MainPage()) { BarBackgroundColor = Color.Black }
        });

        MessagingCenter.Subscribe<App>(
            this,                                                     
            "MessageReceived",        
            (sender) => 
            {
                var StartPage = (((MainPage as MasterDetailPage).Detail as NavigationPage).RootPage as XxmsApp.MainPage);

                StartPage.DisplayAlert(
                    "message",
                    "message received",
                    "ok");
            });    
    }

    // ...

}

Но метод, указанный в качестве третьего аргумента для Subscribe<App>, никогда не вызывается. Я также попробовал это:

        Device.BeginInvokeOnMainThread(() =>
        {
            MessagingCenter.Send(Xamarin.Forms.Application.Current, "MessageReceived", "new message");
        });

Но ничего.

Что я делаю не так?

1 Ответ

0 голосов
/ 30 марта 2020

В вашем android коде проекта

MessagingCenter.Send<object, object>(this, "MessageReceived", "new message");

в вашем общем коде

 MessagingCenter.Subscribe<object, object>(this, "MessageReceived", (sender, args) =>
    {

var StartPage = (((MainPage as MasterDetailPage).Detail as NavigationPage).RootPage as XxmsApp.MainPage);

                StartPage.DisplayAlert(
                    "message",
                    "message received",
                    "ok");
    });
...