我有一个Silverlight控件,它的数据源是我的根ViewModel对象。ViewModel公开了一组卡片以及一个SelectedCard属性,该属性绑定到视图顶部的下拉列表中。然后,在底部有一种表单显示所选卡的属性。我的XAML代码如下(为简化起见):
<StackPanel Orientation="Vertical">
<ComboBox DisplayMemberPath="Name"
ItemsSource="{Binding Path=Cards}"
SelectedItem="{Binding Path=SelectedCard, Mode=TwoWay}"
/>
<TextBlock Text="{Binding Path=SelectedCard.Name}"
/>
<ListBox DisplayMemberPath="Name"
ItemsSource="{Binding Path=SelectedCard.PendingTransactions}"
/>
</StackPanel>
我希望当我在 ComboBox 中选择一个新项目时,TextBlock 和 ListBox 能够更新,但事实并非如此。我确信这与 TextBlock 和 ListBox 实际上绑定到 SelectedCard 的属性有关,因此它正在监听该对象上的属性更改通知。但是,我认为数据绑定应该足够聪明,能够识别绑定表达式中的父对象已更改并更新整个绑定。
值得注意的是,PendingTransactions 属性(绑定到 ListBox)是惰性加载的。因此,当我第一次在 ComboBox 中选择项目时,我会进行异步调用并加载列表,UI 更新以显示与所选项目对应的信息。然而,当我重新选择项目时,UI 不会更改!
例如,如果我的原始列表包含三张卡片,则默认选择第一张卡片。数据绑定确实尝试访问该 Card 对象上的 PendingTransactions 属性,并正确更新了 ListBox。如果我选择列表中的第二张卡片,同样的情况发生了,我会得到该卡片的 PendingTransactions 列表。但是,如果我再次选择第一张卡片,我的 UI 没有任何变化!通过设置断点,我可以确认 SelectedCard 属性正在被正确更新。
我该怎么做才能让它工作???