Xamarin.forms MessagingCenter正在使用WPF,但不使用Android

Xamarin.forms MessagingCenter正在使用WPF,但不使用Android,xamarin.forms,messagingcenter,Xamarin.forms,Messagingcenter,我创建此应用程序是为了回答有关MessagingCenter的一些问题,但由于在Android平台上运行应用程序时出现问题,我无法继续编写代码,如果您知道可能有什么问题,请帮助我。谢谢你的支持 我尝试在messagingcenter订阅中将结果页面更改为新的结果视图,但我不知道会发生什么,对我来说,这就像在订阅中找不到消息一样 应用程序链接() 在ResultView中: public void Registro() { MessagingCenter.Subscribe<Resu

我创建此应用程序是为了回答有关MessagingCenter的一些问题,但由于在Android平台上运行应用程序时出现问题,我无法继续编写代码,如果您知道可能有什么问题,请帮助我。谢谢你的支持

我尝试在messagingcenter订阅中将结果页面更改为新的结果视图,但我不知道会发生什么,对我来说,这就像在订阅中找不到消息一样

应用程序链接()

在ResultView中:

public void Registro()
{
    MessagingCenter.Subscribe<ResultView>(this, "DisplayAlert", message =>
    {
        this.DisplayAlert("Alerta de Registro", "Mensagem DisplayAlert com registro Enviada", "Ok");
    });
}
公共无效注册表()
{
订阅(此“显示警报”,消息=>
{
此.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);
}
ResultView ResultPage=new ResultView();
私有void GoPaginaResultComRegistro(对象发送方,事件参数e)
{
ResultPage.Registro();
MessagingCenter.Send(结果页,“显示警报”);
MessagingCenter.Unsubscribe(结果页,“显示警报”);
this.Navigation.PushAsync(结果页);
}
发送消息时,我在另一个屏幕上等待DisplayAlert,但应用程序只是跳过subscribe中的代码。

试试这个

 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);
公共无效注册表()
{
MessagingCenter.Subscribe(此“显示警报”,异步(发送方,消息)=>
{
等待DisplayAlert(“Alerta de Registro”,信息“Ok”);
});
}
var mensage=“teste”;
MessagingCenter.Send(结果页,“显示警报”,mensagem);
下面是我在项目中使用的一些示例

在my PCL MainPage.cs中

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

        }
public主页()
{   
初始化组件();
发送(“确定”、“显示栏”);
}
在我的原生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());
        }
protectedoverride void OnCreate(Bundle savedInstanceState)
{
MessagingCenter.Subscribe(此“显示栏”,(发件人)=>
{
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(这个,savedInstanceState);
全局::Xamarin.Forms.Forms.Init(这个,savedInstanceState);
加载应用程序(新应用程序());
}

您不需要创建页面的新实例作为参数发送。

首先在您的
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");

    }

这似乎是对MessagingCenter的复杂使用。如果你已经有了ResultPage的一个实例,并且即将导航到它,为什么不在构造函数上传递一个参数,或者使用公共属性/方法呢?该应用程序的目的是练习使用MessagingCenter,但是,如果你能找到另一种简单的方法来完成同样的任务,如果你能告诉我如何做,我将不胜感激。如果你需要更多的帮助,你可以用whatsapp(11948659453)给我发短信,我也是巴西人。我现在不工作,谢谢,你能解释一下发生了什么吗?@MATCH first,DisplayAlert这取决于NavigationStack中存在的页面,所以你应该先推异步页面,然后在UI线程中调用DisplaAlert,所以你应该使用设备。BeginInvokeMainThread,如果它工作,你能标记并投票吗?谢谢,我不能投票,我需要更多的信誉点,但我会尽快回到这里并离开我的投票。再次感谢你。
 public void Registro()
    {
        MessagingCenter.Subscribe<ResultView>(this, "DisplayAlert", message =>
        {
            Device.BeginInvokeOnMainThread( async() =>
            {
                await DisplayAlert("Alerta de Registro", "Mensage DisplayAlert com registro Enviada", "Ok");
            });

        });
    }