Пользовательская карта Xamarin Form - невозможно перейти на другую страницу в моем приложении

У меня есть требование, когда мне нужно перейти к другому действию или странице, созданной в моем основном проекте моего приложения PCL. Все образцы, которые я проверил, ведут меня на веб-сайт с использованием URI. Что мне следует изменить в приведенном ниже коде, чтобы я мог переходить на разные страницы в моем приложении при нажатии на булавку?

public class CustomMapRenderer : MapRenderer, GoogleMap.IInfoWindowAdapter
{
    ...

    void OnInfoWindowClick(object sender, GoogleMap.InfoWindowClickEventArgs e)
    {
        var url = Android.Net.Uri.Parse(customPin.Url);
        var intent = new Intent(Intent.ActionView, url);
        intent.AddFlags(ActivityFlags.NewTask);
        Android.App.Application.Context.StartActivity(intent);
    }
}

person albestep    schedule 24.10.2017    source источник
comment
Что вы имеете в виду, какой код я должен изменить? Что-то не работает? Какая? Что должно произойти и что на самом деле происходит? Почему вы отметили свой вопрос картами Google, если он не имеет к ним никакого отношения?   -  person M. Prokhorov    schedule 24.10.2017


Ответы (2)


Обычно вы вызываете свою пользовательскую карту в PCL и позволяете ей обрабатывать навигацию.

Как я это делаю:

1) Добавьте привязываемое свойство типа ICommand к пользовательской карте.

   public static readonly BindableProperty MapClickedCommandProperty = BindableProperty.Create(
        nameof(MapClickedCommand),
        typeof(ICommand),
        typeof(CustomMap));

    public ICommand MapClickedCommand
    {
        get { return (ICommand)GetValue(MapClickedCommandProperty); }
        set { SetValue(MapClickedCommandProperty, value); }
    }

2) Добавьте общедоступный метод к пользовательской карте, который будет вызываться пользовательским средством визуализации.

public void RaiseMapClicked(Url url)
{
    MapClickedCommand?.Execute(url);
}

3) В пользовательском рендерере в вашем OnInfoWindowClick вызовите общедоступный метод

var url = Android.Net.Uri.Parse(customPin.Url);
var formsMap = Element as CustomMap;
formsMap.RaiseMapClicked(url);

Это позволяет вам привязать команду к пользовательской карте и обрабатывать URL-адрес в вашей модели представления.

person Steve Chadbourne    schedule 24.10.2017

Вы можете отправить сообщение из своего пользовательского MapRenderer всякий раз, когда нажимается булавка, с помощью Xamarin Центр сообщений. См. мой ответ на аналогичный вопрос здесь.

person David Conlisk    schedule 25.10.2017