我正在开发一个适用于 iOS 和 Android 的 xamarin 项目,我们在 Xamarin.Forms 地图上显示自定义标记,我们希望用户在单击自定义标记时导航到另一个视图。
我们使用 Navigation.PushAsync 来浏览视图。这是从非平台特定代码的视图模型完成的,并且 navigation.PushAsync 只能在此处使用,而不能从平台特定代码中使用。这是 customMapRenderers 所在的位置,也是处理标记 onclick 的位置。
所以我的问题是如何从这些 onClick 事件导航到另一个视图? 下面是捕获 onclick 的方法。
安卓:
private void OnMarkerClick(object sender, GoogleMap.MarkerClickEventArgs e)
{
Toast.MakeText(MainApplication.Context, "Button Pressed", ToastLength.Long).Show();
}
iOS:
private void OnDidSelectAnnotationView(object sender, MKAnnotationViewEventArgs e)
{
UIAlertView alert = new UIAlertView()
{
Title = "Event",
Message = "Button Clicked"
};
alert.AddButton("Oke");
alert.Show();
}
正如 Yuri 所说,您可以使用 Messenger 来实现这一点,这里有一个关于如何使用 Messenger
的
sample。您可以在
custom renderer
onClick 事件中使用它,当在 message
中发送 renderer
时,Page
将收到 Message
。因此,您可以在页面的 MessagingCenter.Subscribe
方法中导航到另一个视图。
页码:
MessagingCenter.Subscribe<MainPage>(this, "Navigation", async (sender) =>
{
var page1 = new Page1();
await Navigation.PushModalAsync(page1);
});
自定义渲染器:
MessagingCenter.Send<MainPage>(MainPage.getInstance(), "Navigation");