【问题标题】:Can we add Pins not in collection to Map.Pins?我们可以将不在集合中的 Pins 添加到 Map.Pins 吗?
【发布时间】: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


    【解决方案1】:

    确实,与其尝试手动将 Pin 插入到由绑定处理的集合中,或者手动处理绑定以将我的“特殊针”放入集合中,最简单的解决方案是使用 readonly Circle MyCircle在您的视图/页面中定义,在它的构造函数中使用new Circle { Center = new Position(), Radius = Distance.FromMeters(10) } 填充它,然后在它发生变化时简单地更新它的位置(注意:我只在实际获得位置后将它添加到地图中,否则这是不可能的画)。

    if(_viewModel.MyPosition != null)
    {
        MyCircle.Center = _viewModel.MyPosition;
        if (!MyMap.MapElements.Contains(MyCircle))
        {
            MyMap.MapElements.Add(MyCircle);
        }
    }
    

    留给读者作为练习,以便在需要时弄清楚如何处理输入(我不需要与圆圈交互,只需显示它即可)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多