В моем приложении WP7 есть карта с MapItemsControl, которая содержит кнопки, привязанные к элементам в коллекции пользовательских классов.Вешки привязываются к свойствам элемента в коллекции с помощью DataTemplate.
Когда элемент добавляется или удаляется из коллекции, все выводы отображаются правильно, со свойствами согласно привязкам, но когда только элементысвойства изменены, пользовательский интерфейс не обновляется.Кажется, что привязки просто получают значения из исходного элемента при загрузке, но я бы хотел, чтобы они обновляли элементы пользовательского интерфейса при обновлении свойств элементов исходного набора.
Для иллюстрации я создампохожий пример:
Вот пользовательский класс:
Public Class Box
Property CurrentColor As Color
Property Location As GeoCoordinate
End Class
Существует их коллекция:
Dim TempBoxes As ObservableCollection(Of Box)
В моем элементе управления картой есть MapItemsControl:
<maps:MapItemsControl Name="BoxControl"
ItemTemplate="{StaticResource BoxTemplate}"
ItemsSource="{Binding TempBoxes}"/>
Шаблон элемента выглядит примерно так:
<DataTemplate x:Key="BoxTemplate">
<maps:Pushpin Location="{Binding Location}" ManipulationStarted="BoxTouched">
<maps:Pushpin.Template>
<ControlTemplate>
<Ellipse Width="35" Height="35" Margin="54,148,366,584"
Stretch="Fill" StrokeThickness="4" Stroke="Black"
Fill="{Binding CurrentColor}" />
</ControlTemplate>
</maps:Pushpin.Template>
</maps:Pushpin>
</DataTemplate>
Обработчик событий касания переключает цвет булавки между синим и красным:
Private Sub BoxTouched(ByVal sender As Object, ByVal e As RoutedEventArgs)
With DirectCast(DirectCast(sender, Pushpin).DataContext, Box)
If .CurrentColor = Colors.Red Then
.CurrentColor = Colors.Blue
Else
.CurrentColor = Colors.Red
End If
End With
End Sub
Всякий раз, когда я добавляю или удаляюДля элементов из TempBox, все выводы отображаются так, как должны (например, если я указываю цвет в элементе коллекции, то вывод показывает цвет).
Нажатие на элемент вызывает триггер BoxTouched, который вызывает цвет элементаизменить в коллекции, но пользовательский интерфейс не изменится (цвет булавки остается прежним).
Чтобы пользовательский интерфейс обновил цвет, я должен заставить его снова визуализировать булавки, добавив что-толайк BoxTouched :
BoxControl.ItemsSource = Nothing
BoxControl.ItemsSource = TempBoxes
Я предполагаю, что есть лучший способ сделать это?