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

问题描述 投票:0回答:1

我正在开发一个适用于 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();
    }
xamarin xamarin.ios xamarin.android xamarin.forms custom-renderer
1个回答
3
投票

正如 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");
© www.soinside.com 2019 - 2024. All rights reserved.