Xamarin Forms - 两个不同页面/项目之间的MessagingCenter

时间:2016-06-30 05:48:33

标签: xamarin.forms messaging

我正在寻找在Xamarin表单(便携式项目)中实现MessagingCenter的X原因。

- 我必须使用 Project <的MainPage.xaml.cs Project.WinPhone(Windows Phone 8.1)进行Pages/MyPersonalPage.xaml.cs通信strong>(PCL部分)

我想我必须使用以下两个功能:

发送Send<TSender> (TSender sender, string message)

订阅Subscribe<TSender> (object subscriber, string message, Action<TSender> callback, TSender source = null)

也许我误解了,但如果<TSender> WinPhone 项目中且subscriber便携式项目中,我可以&#39;关于组件链接他们。 (无限两种方式链接)

这意味着我无法访问MainPage.xaml.csPages/MyPersonalPage.xaml.cs然后,我该如何才能使其有效?

我的代码已经可以了,否则,我能够从WinPhone部分捕捉到我需要的Events,并且我也能够在PCL中进行我需要的修改。唯一的问题是我需要调用此方法,一旦事件出现就进行修改

3 个答案:

答案 0 :(得分:2)

正如 Answer on Forums Xamarin

提及 @AlessandroCaliaro

在OS方面我使用类似

的东西
Xamarin.Forms.MessagingCenter.Send<App> ((App)Xamarin.Forms.Application.Current, "OnBeaconServiceConnect");

在XF方面我使用这个

MessagingCenter.Subscribe (this, "OnBeaconServiceConnect", (sender) => {
    // do something
});

它说 - &gt; 使用类似

的内容

所以

操作系统方: MainPage.xaml.cs - &gt;它是 WinPhone8.1 Part Below ,但对于其他平台(Android,iOS,Windows,UWP)

应该是相同的
MessagingCenter.Send<Project.App>((Project.App)Xamarin.Forms.Application.Current, "Hi");

XF方面: ListenerPage.xaml.cs

MessagingCenter.Subscribe<App>((App)Application.Current, "Hi", (sender) => {
    Debug.WriteLine("get hi !!!");
});

谢谢!

答案 1 :(得分:1)

TSender可以是任何类。它描述了事件回调的消息有效负载。例如,如果您只想向订阅者发送字符串,则可以使用Send<string>()Subscribe<string>()。或者您可以发送更复杂的数据结构......例如Send<Person>(newContact, "added")Subscribe<Person>(this, "added", (newContact) => { //... })

它被实现为Type引用,因此您可以使用TSender的私有类,这基本上意味着来自声明程序集之外的任何人都无法窃听(私有类在外部不可见)宣布组装)。

答案 2 :(得分:-1)

这项工作完美!!

(Xamarin Forms Portable Solution)

  1. 在Android项目中:
  2. display: inline-block;
        *display: inline;
        vertical-align: middle;
    
    1. 在便携式项目(PCL)中的任何视图或页面
    2. MessagingCenter.Send((App)Xamarin.Forms.Application.Current, "Hi");