Windows Phone 8.1 Runtime中具有多个子节点的MapControl性能很差

Mal*_*tek 5 c# maps windows-runtime winrt-xaml windows-phone-8.1

我有一个MapControl应该填充多个对象(500+).这些对象代表某种POI.当用户点击对象(图钉)时,我会显示有关POI的更多信息.所以,我需要:

  1. 一个MapControl能够处理子对象的高量
  2. 拦截Tapped子对象的事件

为了实现第二个目标,我决定定义自己的图钉模板:

  <maps:MapControl x:Name="Map">
    <maps:MapItemsControl ItemsSource="{Binding Pushpins}">
      <maps:MapItemsControl.ItemTemplate>
        <DataTemplate>
          <Image Width="40"
                 Height="40"
                 Source="{ ... }"
                 Tapped="OnPushpinTappedAsync"
                 maps:MapControl.Location="{Binding Location}"
                 maps:MapControl.NormalizedAnchorPoint="{Binding AnchorPoint}" />
        </DataTemplate>
      </maps:MapItemsControl.ItemTemplate>
    </maps:MapItemsControl>
  </maps:MapControl>
Run Code Online (Sandbox Code Playgroud)

除了事实之外......这种方法的视觉效果是AWFULL.每次我移动地图时,每次都会Pushpin闪烁很多.就像他们不是,我不知道,这个位置一定要受到约束.他们也落后了.看起来真的很糟糕.渲染这些对象真的很差.

另一种方法是将元素添加到所述MapControlMapElements属性.它使这些对象的渲染非常好.但后来我失去了binding能力,必须解决它 - 我不是那个的忠实粉丝.还有第二个问题 - 从我所读到的,渲染集合的对象MapElements是一个尽力而为的交易.所以它不能保证它会成功.这对我来说不是一个选择,因为将来我计划添加群集功能,所以我需要完全控制地图上呈现的内容和不需要的内容.

你知道为什么这些MapControl元素会如此闪烁吗?我该怎么做才能防止它?提前感谢任何提示或答案.

小智 -1

尝试这个:

Tag="{Binding index_of_collection}"
Run Code Online (Sandbox Code Playgroud)

和这个:

OnPushpinTappedAsync()

int index = (int)(sender as Image).Tag;  //index_of_collection
Run Code Online (Sandbox Code Playgroud)