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

Calling Naviation.PushAsync from CustomMapRenderer when clicked on a marker

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

我们正在使用 Navigation.PushAsync 浏览视图。这是从非平台特定代码的视图模型完成的,navigation.PushAsync 只能在那里使用,不能从平台特定代码中使用。这是 customMapRenderer 所在的位置,也是处理标记的 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();
    }

正如尤里所说,你可以通过使用Messenger, here is a sample实现这一点关于如何使用Messenger。您可以在 custom renderer onClick 事件中使用它,当在 renderer 中发送 message 时,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");