MessagingCenter работает на WPF, но не работает на Android - PullRequest
1 голос
/ 15 октября 2019

Я создал это приложение, чтобы ответить на некоторые вопросы, касающиеся MessagingCenter, но я не могу продолжить код из-за проблемы с запуском приложения специально на платформе Android, если вы знаете, что может быть не так, пожалуйста, помогите мне. Спасибо за поддержку.

Я пытался кое-что изменить, как страница результатов на новое представление результатов в подписке Messagingcenter, но я понятия не имею, что происходит, для меня это все равно, что не найти сообщение в подписке.

Ссылка на приложение ( GitHub )

В ResultView:

public void Registro()
{
    MessagingCenter.Subscribe<ResultView>(this, "DisplayAlert", message =>
    {
        this.DisplayAlert("Alerta de Registro", "Mensagem DisplayAlert com registro Enviada", "Ok");
    });
}

На главной странице:

ResultView ResultPage = new ResultView();    

private void GoPaginaResultComRegistro(object sender, EventArgs e)
{
    ResultPage.Registro();
    MessagingCenter.Send<ResultView>(ResultPage, "DisplayAlert");
    MessagingCenter.Unsubscribe<ResultView>(ResultPage, "DisplayAlert");
    this.Navigation.PushAsync(ResultPage);
}

Я ждудля DisplayAlert на другом экране при отправке сообщения, но приложение просто пропускает код внутри подписки.

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Первый в вашем GoPaginaResultComRegistro() методе, вы должны отправить сообщение после PushAsync

private void GoPaginaResultComRegistro(object sender, EventArgs e)
    {
        ResultPage.Registro();
        this.Navigation.PushAsync(ResultPage);
        MessagingCenter.Send<ResultView>(ResultPage, "DisplayAlert");
        MessagingCenter.Unsubscribe<ResultView>(ResultPage, "DisplayAlert");

    }

Второй на вашей ResultView странице, позвоните DisplayAlert в MainThread:

 public void Registro()
    {
        MessagingCenter.Subscribe<ResultView>(this, "DisplayAlert", message =>
        {
            Device.BeginInvokeOnMainThread( async() =>
            {
                await DisplayAlert("Alerta de Registro", "Mensage DisplayAlert com registro Enviada", "Ok");
            });

        });
    }
0 голосов
/ 15 октября 2019

Попробуйте это

 public void Registro()
        {
            MessagingCenter.Subscribe<ResultView,string>(this, "DisplayAlert", async (sender,message) =>
            {
                await DisplayAlert("Alerta de Registro", message, "Ok");
            });
    }

var mensagem = "teste";
MessagingCenter.Send<ResultView,string>(ResultPage, "DisplayAlert",mensagem);

Вот пример, который я использую в моем проекте

в моем PCL MainPage.cs

public MainPage()
        {   
            InitializeComponent();
            MessagingCenter.Send<string>("ok", "showBar");

        }

в моем родном проекте Android MainActivity.cs

protected override void OnCreate(Bundle savedInstanceState)
        {
            MessagingCenter.Subscribe<string>(this, "showBar", (sender) =>
            {

                this.Window.ClearFlags(WindowManagerFlags.Fullscreen);

            });
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;
            this.Window.AddFlags(WindowManagerFlags.Fullscreen);
            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
        }

вам не нужно создавать новый экземпляр вашей страницы для отправки в качестве параметра.

...