在Bing地图中添加新的Pushpins时如何提高WPF应用程序的性能?

时间:2012-11-22 11:40:49

标签: c# wpf performance

现在我的应用程序读取带有纬度和经度节点(7k位置)的XML。使用滑块,用户可以选择要在地图上显示的节点。现在,每次ValueChanged执行以下代码时:

foreach (HueDataClass dataClass in plotThumbList)
{
    Pushpin Lamp = new Pushpin();                  
    Lamp.Location = new Microsoft.Maps.MapControl.WPF.Location(dataClass.Lat, dataClass.Lon);
    hueMap.Children.Add(Lamp);
}

有时应用程序冻结一秒钟,然后显示所有的Pushpins ..我怎样才能提升性能?

亲切的问候, 尼尔斯

2 个答案:

答案 0 :(得分:3)

您应该使用MapItemsControl并将其ItemsSource属性绑定到数据项的ObservableCollection,而不是手动将图钉添加到MapLayer。

<Window.Resources>
    <DataTemplate x:Key="MapItemDataTemplate">
        <m:Pushpin Location="{Binding ...}" ... />
    </DataTemplate>
    <local:DataItemsCollection x:Key="DataItems"/>
</Window.Resources>
<m:Map ... >
    <map:MapItemsControl
        ItemTemplate="{StaticResource MapItemDataTemplate}"
        ItemsSource="{Binding Source={StaticResource DataItems}}"/>
</m:Map>

另请参阅ItemsSource中的示例部分以及有关如何绑定到集合的链接。

答案 1 :(得分:0)

我认为您应该尝试使用自己的应用程序。执行在单独的线程中添加图钉的代码。

以下是一些资源:http://msdn.microsoft.com/en-us/library/dd460717.aspx
                         http://msdn.microsoft.com/en-us/library/dd235678.aspx

您将不得不处理无法从其他线程更新UI线程的事实。我知道你必须在WinForms中使用InvokeRequired,但我不知道WPF。