Программируемое добавление сотен кнопок в карты bing останавливает интерфейс WP7 - PullRequest
3 голосов
/ 03 июня 2011

Я работаю над приложением WP7, которое использует карты Bing для отображения ~ 600 кнопок. Когда я добавляю их на карту, используя map.Children.Add (pushpin), пользовательский интерфейс останавливается на ~ 200 мс. Я видел, что в Silverlight вы можете использовать Microsoft.Maps.EntityCollection для добавления булавок на карту, но, к сожалению, я не смог найти, как использовать сборку на WP7. Кто-нибудь знает решение этой проблемы?

Ответы [ 2 ]

10 голосов
/ 03 июня 2011

Может быть, вы смотрите на проблему неправильно.WP7 - компактный (хотя и мощный) инструмент, позволяющий быстро показать пользователю то, что он хочет знать (когда приложения написаны правильно).

Пользователь не может увидеть 600 кнопок за один раз на устройстветакой маленький, так почему бы просто не показать им кнопки, которые находятся в видимой области (или близко к ней), и добавить кнопки, когда пользователь перемещается по карте?

В качестве альтернативы, вы могли бы «просачиваться», нажимая кнопкиих по одному (или более) за раз, используя DispatcherTimer, так что пользователь видит, как нажимные кнопки постепенно добавляются без существенного влияния на производительность.

Другая возможность (именно это я обычно и делаю) - добавить MapItemsControl с DataTemplate, установленным на Pushpin и привязывающим коллекцию к вашей коллекции местоположений pushpin.Если привязка к ObservableCollection, вы можете «подать», как упомянуто выше, если перф является проблемой.

1 голос
/ 05 июня 2011

С точки зрения, аналогичной точке зрения Дерека, я считаю крайне маловероятным, чтобы вы серьезно хотели поставить 600 пинов на экран одновременно .Я предполагаю, что они охватывают большую географическую область, и пользователь вряд ли увидит больше, чем горстку за раз.

Если это так, вы можете тривиально применить клипкорп, чтобы отбросить ваши точки, тогдадобавить полученный скромный список к слою, и Presto!Высокая производительность.

Кроме того, существует проблема в том, что делать, когда пользователь отодвигается, делая так много выводов, что они объединяются в один большой бесполезный, но ярко окрашенный шарик.Это более сложная проблема, традиционно решаемая с помощью дерева quadtree, и у меня есть подозрение, что вы только что сказали «а что?»но, к счастью, Google - ваш друг.

Да, и для решения вашей заявленной проблемы - не добавляйте булавки непосредственно на карту.Добавьте их в MapLayer, а затем добавьте это.

...