c# - Rendimiento terrible de MapControl con varios hijos en Windows Phone 8.1 Runtime
windows-runtime maps (4)
Tengo un MapControl
que se supone que debe estar lleno de varios objetos (500+). Estos objetos representan algún tipo de PDI. Cuando el usuario toca el objeto (chincheta), muestro más información sobre el PDI. Así que necesito:
- Un
MapControl
capaz de manejar gran cantidad de objetos secundarios - Interceptar el evento
Tapped
del objeto secundario
Para lograr el segundo objetivo, decidí definir mi propia plantilla de chinchetas:
<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>
Esto funciona muy bien, excepto por el hecho de que ... el enfoque visual de este enfoque es AWFULL. Cada vez que muevo un mapa, cada Pushpin
parpadea mucho. Es como si no estuvieran, no lo sé, atados a la posición. También están rezagados. Se ve muy mal. La representación de esos objetos es realmente pobre.
La alternativa es agregar elementos a la propiedad MapElements
. Hace que la representación de esos objetos sea realmente agradable. Pero luego pierdo binding
capacidad de binding
y tendré que solucionarlo, no soy un gran admirador de eso. También hay un segundo problema: por lo que he leído, renderizar objetos de la colección MapElements
es un gran esfuerzo. Por lo tanto, no garantiza que tenga éxito. Y esa no es una opción para mí, ya que en el futuro planeo agregar la funcionalidad de clúster, por lo que necesito tener un control total sobre lo que se está representando en el mapa y lo que no.
¿Tiene alguna idea de por MapControl
los elementos de MapControl
parpadean tanto? ¿Qué puedo hacer para prevenirlo? Gracias de antemano por cualquier pista o respuesta.
Prueba esto:
Tag="{Binding index_of_collection}"
y esto:
OnPushpinTappedAsync()
int index = (int)(sender as Image).Tag; //index_of_collection
Estoy desarrollando una aplicación de rastreo GPS. En las pruebas de un teléfono económico lumia 630 lag realmente notable con los marcadores XAML al desplazarse por el mapa. En Lumia 930, este retraso es apenas perceptible, todo se ve bien. Aparentemente, el componente MapControl simplemente no está optimizado para teléfonos de gama baja.
Estoy enfrentando exactamente el mismo problema. Me parece que el MapControl está completamente roto. Hay muchos más errores además del rendimiento :(
Realmente no puedes resolver el problema, pero puedes crear una aplicación WP8.0 Silverlight "antigua" y usar algo como esto:
<Page xmlns:map="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps">
<map:Map Grid.Row="1" x:Name="myMap">
<tool:MapExtensions.Children>
<tool:MapItemsControl>
... and so on ...
Esto funciona bien, pero por supuesto tienes que cambiar todo, desde Win (P) RT a Silverlight ...
Yo también enfrenté este problema, pero creo que esta biblioteca es útil.
Esperemos que Microsoft actualice MapControl para Windows 10.