WP7自定义类UI绑定问题

时间:2011-02-04 18:50:04

标签: vb.net class binding windows-phone-7

我的WP7应用程序中有一个MapItemsControl地图,其中包含绑定到自定义类集合中的项目的图钉。图钉通过DataTemplate绑定到集合中项目的属性。

当在集合中添加或删除项目时,所有引脚都会正确显示,并且按照绑定显示属性,但是当仅修改项目的属性时,UI不会更新。绑定似乎只是在加载时从源项获取值,但我希望它们在源集合项的属性更新时保持UI元素的更新。

为了说明,我将创建一个类似的例子:

这是一个自定义类:

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子,这会导致项目的颜色在集合中发生变化,但UI不会改变(引脚颜色保持不变)。

要让UI更新颜色,我必须通过向 BoxTouched 添加类似的内容来再次渲染引脚:

BoxControl.ItemsSource = Nothing
BoxControl.ItemsSource = TempBoxes

我认为有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

为了让DataTemplate响应数据对象的属性值更改,您需要在数据对象上实现INotifyPropertyChanged接口,以便在属性更改时引发属性更改通知。

如果您不确定如何执行此操作,请查看MSDN documentation中的VB示例。