Как заменить MapView с отдельными контактами?
Я пытаюсь изменить MapView в моем приложении Xamarin Forms (с Mapsui и Prism), так как мне нужно отдельное представление для хранения булавок. Первый MapView (давайте назовем это default
) для отображения всех выводов из списка. Второй MapView (history
) для отображения новых выводов, которые удаляются при выходе из Page.
я имею Dictionary
для хранения моих MapViews, чтобы иметь простой способ получить доступ к любому виду, который я хочу. Каждый созданный 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, чтобы скрыть контакты при переходе к истории и показать их, когда я вернусь к виду по умолчанию? Или есть лучший способ "сгруппировать" булавки и скрыть / показать их по имени?
Обновление Я думаю, что это может быть важно упомянуть:
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 ответ
Некоторые варианты
- Возможно, вы можете привязать свойство IsVisible Pins к полю HistoryMode в вашем представлении. Я никогда не использовал это сам.
- Используйте некоторые функциональные возможности более низкого уровня. подобно
- Используйте отдельные слои по умолчанию и историю и включите / отключите их при необходимости. Возможно, вам потребуется выполнить преобразование WGS84 (GPS-координаты) в SphericalMercator. https://mapsui.com/api/Mapsui.Projection.SphericalMercator.html?q=sphericalmercator
- Используйте ThemeStyle. У него есть метод, который можно использовать для указания любого необходимого стиля (видимый / цвет / символ) и атрибутов объекта. https://mapsui.com/api/Mapsui.Styles.Thematics.ThemeStyle.html?q=themestyle
Для функциональности более низкого уровня вам могут понадобиться примеры, чтобы помочь вам: https://mapsui.com/documentation/samples.html