Я пытаюсь изменить 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
).