单击标记时从CustomMapRenderer调用Naviation.PushAsync

时间:2017-06-07 07:24:25

标签: xamarin xamarin.ios xamarin.android xamarin.forms custom-renderer

我正在开发ios aswel的xamarin项目,我们在Xamarin.Forms地图上显示自定义标记,我们希望用户在点击自定义标记时导航到另一个视图。

我们正在使用Navigation.PushAsync来浏览视图。这是从非平台特定代码的视图模型中完成的,而navigation.PushAsync只能在那里使用,而不能在特定于平台的代码中使用。这是customMapRenderers的位置,以及处理标记的onlclick的位置。

所以我的问题是如何从这些onClick事件导航到另一个视图。 下面是抓住onclick的方法。

Android:

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();
    }

1 个答案:

答案 0 :(得分:3)

正如Yuri所说,您可以使用Messenger来实现此功能,这里有一个关于如何使用Messenger的{​​{3}}。您可以在custom renderer onClick事件中使用它,当在message中发送renderer时,Page将收到Message。因此,您可以导航到网页MessagingCenter.Subscribe方法中的其他视图。

Page:

MessagingCenter.Subscribe<MainPage>(this, "Navigation", async (sender) =>
{
     var page1 = new Page1();
     await Navigation.PushModalAsync(page1);
});

自定义渲染器:

MessagingCenter.Send<MainPage>(MainPage.getInstance(), "Navigation");