0

现在我的应用程序读取带有纬度和经度节点(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);
}

有时应用程序会冻结一秒钟,然后显示所有图钉。我怎样才能提高性能?

亲切的问候,尼尔斯

4

2 回答 2

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中的示例部分以及其中的链接以了解如何绑定到集合。

于 2012-11-22T12:53:24.110 回答
0

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

这里有一些资源: http: //msdn.microsoft.com/en-us/library/dd460717.aspx
http://msdn.microsoft.com/en-us/library/dd235678.aspx

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

于 2012-11-22T11:49:18.120 回答