我正在尝试在我的Xamarin Forms应用程序(使用Mapsui和Prism)中更改MapView,因为我需要单独的视图来存储Pins。第一个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();
}
带有日志的额外代码用于调试目的 - 它显示正确的值(prev pins = 7,new pins = 0,view pins = 0)。
我添加了没有缩放按钮的history
视图以确保它正在改变 - 它是(因此我没有必要发布XAML)。
在导航到历史记录时如何更改MapView以隐藏引脚并在切换回默认视图时显示它们?或者是否有更好的方法来“分组”Pins并根据名称隐藏/显示它们?
更新我认为这可能很重要:
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;
}
这是我添加Pins查看的方式。这与上面的MapView相同(所有代码都来自MapService
)。
一些选择
对于较低级别的功能,您可能需要样本来帮助您:https://mapsui.com/documentation/samples.html