Xamarin - 有没有办法从本地项目中通知Xamarin.Forms?

时间:2016-06-03 18:24:22

标签: c# xamarin xamarin.android xamarin.forms

所以,我在我的原生项目(Android MainActivity OnCreate)中有这个代码,它没有做任何事情:

var container = TinyIoCContainer.Current;
TinyMessengerHub tmh = (TinyMessengerHub)container.Resolve<ITinyMessengerHub>();

tmh.Subscribe<LocalMessage>((m) => {
    // this doesn't show
    Toast.MakeText(this, m.Content, ToastLength.Long);
});

我在这里使用TinyMessenger通知应用程序:

[Service(Exported = false), IntentFilter(new[] { "com.google.android.c2dm.intent.RECEIVE" })]
class MyGcmListenerService : GcmListenerService
{
    public override void OnMessageReceived(string from, Bundle data)
    {
        string msg = data.GetString("message");

        var container = TinyIoCContainer.Current;
        TinyMessengerHub tmh = (TinyMessengerHub)container.Resolve<ITinyMessengerHub>();
        tmh.Publish(new LocalMessage(this, msg));
    }
}

我尝试将TinyMessenger添加到我的PCL中,但显然它不受支持(TinyIoc.cs文件中缺少引用等,相同的代码在Android项目中运行良好)

那么,有没有办法通知Xamarin.Forms有关到达的消息,以便我可以显示警告窗口?

1 个答案:

答案 0 :(得分:6)

此示例使用Page完成,但您可以使用Application类订阅/取消订阅,也可以选择性地在应用逻辑中订阅/取消订阅。

Xamarin.Forms项目中,通过MessageCenter订阅/取消订阅邮件:

protected override void OnAppearing()
{
    base.OnAppearing();
    MessagingCenter.Subscribe<object, string>(this, "ShowAlertMessage", (sender, msg) =>
    {
        Device.BeginInvokeOnMainThread(() => {
            MainPage.DisplayAlert("Push message", msg, "OK"); 
        });
    });
}

protected override void OnDisappearing()
{
    base.OnDisappearing();
    MessagingCenter.Unsubscribe<object>(this, "ShowAlertMessage");
}

本土&#34;项目通过MessageCenter发送消息:

MessagingCenter.Send<object, string> (this, "ShowAlertMessage", "StackOverFlow Rocks");