У меня есть карта с MapItemsControl в моем приложении WP7, которая содержит кнопки, привязанные к элементам в коллекции пользовательских классов. Булавки привязаны к свойствам элемента в коллекции через DataTemplate.WP7 Custom Class UI Binding Issue
Когда элемент добавляется или удаляется из коллекции, все контакты отображаются правильно, со свойствами в соответствии с привязками, но при изменении свойств элементов пользовательский интерфейс не обновляется. Как правило, привязки получают значения из исходного элемента при загрузке, но я бы хотел, чтобы они обновляли элементы пользовательского интерфейса при обновлении свойств элементов исходной коллекции.
Чтобы проиллюстрировать это, я создам подобный пример:
Вот пользовательский класс:
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
Всякий раз, когда я добавить или удалить элементы из TempBoxes, штыри все делают как они должны (например, если я укажу цвет в элементе коллекции, на выводе отображается цвет).
Нажатие на этот элемент вызывает функцию BoxTouched, что приводит к изменению цвета элемента в коллекции, но пользовательский интерфейс не изменяется (цвет контактов остается неизменным).
Чтобы получить пользовательский интерфейс, чтобы обновить цвет, я должен получить его снова делают булавки, добавляя что-то вроде этого, чтобы BoxTouched:
BoxControl.ItemsSource = Nothing
BoxControl.ItemsSource = TempBoxes
Я предполагаю, что есть лучший способ сделай это?