【发布时间】:2022-06-16 00:33:18
【问题描述】:
我有一个 Xamarin 项目,我在其中使用 Xamarin.Essentials 的 Xamarin.Maps。我有一个 IObservableCollection 加载了我在 XAML 视图/页面中绑定到我的地图的实体,但我还想手动将不在该集合中的 Pin 添加到该地图。可以完成还是我应该放弃 XAML 绑定并手动处理 Map.Pins?
MyPage.xaml
...
<maps:Map x:Name="MyMap" FlexLayout.Grow="1" ItemsSource="{Binding Churrerxs}">
<maps:Map.ItemTemplate>
<DataTemplate>
<maps:Pin x:DataType="model:MyModel" Position="{Binding PositionAttr}" Label="{Binding NameAttr}" />
</DataTemplate>
</maps:Map.ItemTemplate>
</maps:Map>
...
我尝试在MyMap 的定义中添加以下内容,但显然它不起作用:
<maps:Map.Pins>
<maps:Pin Position="{Binding MyPosition}" Label="MyPin" />
</maps:Map.Pins>
我还尝试在页面的构造函数上创建一个Pin,并添加一个在MyPosition 发生如下变化时执行的处理程序:
if(_viewModel.MyPosition != null)
{
MyPin.Position = _viewModel.MyPosition;
if (!MyMap.Pins.Contains(MyPin))
{
MyMap.Pins.Add(MyPin);
}
}
但由于 Pins 已经被 XAML 中的 ItemTemplate 操作,我已经陷入了手动添加 pin 的竞争条件,但很快它就会被删除。
所以,我正在尝试找出如何最好地处理这个问题。我希望 Map 可以有多个 Pins 数组,因此我们可以为不同的集合使用绑定,但似乎并非如此。我在想 a) 我应该手动处理集合,或者 b) 而不是 Pin 我应该通过绘制一个圆圈或其他一些独立于 Pins 数组的图形来显示 MyPosition。但如果有人知道处理这种情况的适当模式,我愿意接受建议。
【问题讨论】:
标签: xamarin.forms