Как заменить MapView с отдельными контактами? - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь изменить MapView в моем приложении Xamarin Forms (с Mapsui и Prism), так как мне нужно отдельное представление для хранения пинов. Первый MapView (назовем его default) предназначен для отображения всех выводов из списка. Второй MapView (history) предназначен для отображения новых выводов, которые удаляются при выходе из Page.

У меня есть Dictionary для хранения моих MapView, чтобы иметь простой способ получить доступ к любому виду, который я хочу. Каждый созданный MapView имеет один и тот же экземпляр Map . Я хочу изменить значение с default на history, чтобы скрыть контакты, добавленные в default представление.

Я меняю представление следующим образом:

public void ChangeView(string name)
        {
            var prev = MapView;
            loggerService.Info($"Pins: {prev.Pins.Count}");
            MapView = GetView(name); // Current MapView in XAML, returns instance of MapView
            loggerService.Info($"New view pins: {MapView.Pins.Count}");

            Task.Factory.StartNew(() => 
            {
                Task.Delay(2000).Wait();

                loggerService.Info($"View pins: {MapView.Pins.Count}");
            });

            MapView.Refresh();
        }

дополнительный код с журналом предназначен для целей отладки - он показывает правильные значения (предыдущие выводы = 7, новые выводы = 0, просмотр выводов = 0).

Я добавил history представление без кнопок Zoom, чтобы убедиться, что оно меняется - и это так (поэтому нет необходимости публиковать XAML, я думаю).

Как мне изменить MapView, чтобы скрывать контакты при переходе к истории и показывать их, когда я возвращаюсь к виду по умолчанию? Или есть лучший способ «сгруппировать» булавки и скрыть / показать их по имени?

Update Я думаю, что это может быть важно упомянуть:

public Pin AddMarker(Position point)
        {
            var pin = new Pin(MapView)
            {
                Label = "PinType.Pin",
                Position = point,
                Type = PinType.Pin,
                Transparency = 0.5f,
                Color = Xamarin.Forms.Color.FromRgb(2, 144, 210),
                Scale = 0.5f,
            };

            MapView.Pins.Add(pin);

            return pin;
        }

Так я добавляю Пины для просмотра. Это тот же MapView, что и выше (весь код взят из MapService).

1 Ответ

0 голосов
/ 01 апреля 2019

Некоторые опции

  • Возможно, вы можете связать свойство IsVisible Pins с полем HistoryMode в вашем представлении. Я никогда не использовал это сам.
  • Используйте некоторые функциональные возможности более низкого уровня. подобно

Для функциональности более низкого уровня вам могут понадобиться образцы, чтобы помочь вам: https://mapsui.com/documentation/samples.html

...