Xamarin Forms - 两个不同 Pages/Projects 之间的 MessagingCenter
Xamarin Forms - MessagingCenter between two different Pages/Projects
出于 X 原因,我正在搜索将 MessagingCenter 实施到我的 Xamarin Forms(便携式项目)中。
-我必须将 Project.WinPhone (Windows Phone 8.1) 的 MainPage.xaml.cs
与 Pages/MyPersonalPage.xaml.cs
项目 (PCL 部分)
我想我必须使用以下两个功能:
发送 : Send<TSender> (TSender sender, string message)
订阅 : Subscribe<TSender> (object subscriber, string message, Action<TSender> callback, TSender source = null)
也许我误解了但是,如果 <TSender>
在 WinPhone 项目中并且 subscriber
在 中便携式 项目,我不能link 他们关于程序集。 (无限两种方式link)
这意味着我无法访问 MainPage.xaml.cs
或 Pages/MyPersonalPage.xaml.cs
。 那么,我应该怎么做才能让它发挥作用呢?
我的代码已经可以了,否则,我能够从 WinPhone 部分捕获我需要的 Events
并且我也能够在PCL。唯一的问题是我需要调用这个方法,一旦事件出现就进行修改
TSender
可以是任何 class。它描述了事件回调的消息负载。例如,如果您只想向订阅者发送一个字符串,那么您可以使用 Send<string>()
和 Subscribe<string>()
。或者您可以发送更复杂的数据结构...例如 Send<Person>(newContact, "added")
和 Subscribe<Person>(this, "added", (newContact) => { //... })
.
它作为 Type
引用实现,因此您可以将私有 classes 用于 TSender
,这基本上意味着声明程序集外部的任何人都不能窃听(私有classes 在声明程序集之外是不可见的。
如前所述@AlessandroCaliaro Answer on Forums Xamarin
在OS这边我使用类似
的东西
Xamarin.Forms.MessagingCenter.Send<App> ((App)Xamarin.Forms.Application.Current, "OnBeaconServiceConnect");
在 XF 方面我使用这个
MessagingCenter.Subscribe (this, "OnBeaconServiceConnect", (sender) => {
// do something
});
它说 -> 使用类似
所以
OS side: MainPage.xaml.cs
--> 这是 WinPhone8.1 下面的部分,但是它其他平台应该相同(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 !!!");
});
谢谢!
这项工作完美!!
(Xamarin Forms 便携式解决方案)
- 在 Android 项目中:
MessagingCenter.Send((App)Xamarin.Forms.Application.Current, "Hi");
- 在便携式项目中(PCL)任何视图或页面
MessagingCenter.Subscribe((App)Xamarin.Forms.Application.Current, "Hi", (sender) => {
labelStatus.Text = "We have the Hi message here";
});
出于 X 原因,我正在搜索将 MessagingCenter 实施到我的 Xamarin Forms(便携式项目)中。
-我必须将 Project.WinPhone (Windows Phone 8.1) 的 MainPage.xaml.cs
与 Pages/MyPersonalPage.xaml.cs
项目 (PCL 部分)
我想我必须使用以下两个功能:
发送 : Send<TSender> (TSender sender, string message)
订阅 : Subscribe<TSender> (object subscriber, string message, Action<TSender> callback, TSender source = null)
也许我误解了但是,如果 <TSender>
在 WinPhone 项目中并且 subscriber
在 中便携式 项目,我不能link 他们关于程序集。 (无限两种方式link)
这意味着我无法访问 MainPage.xaml.cs
或 Pages/MyPersonalPage.xaml.cs
。 那么,我应该怎么做才能让它发挥作用呢?
我的代码已经可以了,否则,我能够从 WinPhone 部分捕获我需要的 Events
并且我也能够在PCL。唯一的问题是我需要调用这个方法,一旦事件出现就进行修改
TSender
可以是任何 class。它描述了事件回调的消息负载。例如,如果您只想向订阅者发送一个字符串,那么您可以使用 Send<string>()
和 Subscribe<string>()
。或者您可以发送更复杂的数据结构...例如 Send<Person>(newContact, "added")
和 Subscribe<Person>(this, "added", (newContact) => { //... })
.
它作为 Type
引用实现,因此您可以将私有 classes 用于 TSender
,这基本上意味着声明程序集外部的任何人都不能窃听(私有classes 在声明程序集之外是不可见的。
如前所述@AlessandroCaliaro Answer on Forums Xamarin
在OS这边我使用类似
的东西Xamarin.Forms.MessagingCenter.Send<App> ((App)Xamarin.Forms.Application.Current, "OnBeaconServiceConnect");
在 XF 方面我使用这个
MessagingCenter.Subscribe (this, "OnBeaconServiceConnect", (sender) => {
// do something
});
它说 -> 使用类似
所以
OS side: MainPage.xaml.cs
--> 这是 WinPhone8.1 下面的部分,但是它其他平台应该相同(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 !!!");
});
谢谢!
这项工作完美!!
(Xamarin Forms 便携式解决方案)
- 在 Android 项目中:
MessagingCenter.Send((App)Xamarin.Forms.Application.Current, "Hi");
- 在便携式项目中(PCL)任何视图或页面
MessagingCenter.Subscribe((App)Xamarin.Forms.Application.Current, "Hi", (sender) => {
labelStatus.Text = "We have the Hi message here";
});