我有一個Silverlight控件,它具有我的根ViewModel對象,因爲它是數據源。 ViewModel公開了一張卡片列表以及一個SelectedCard屬性,該屬性綁定到視圖頂部的下拉列表中。然後,我在底部顯示SelectedCard的屬性。我的XAML顯示爲(減少爲簡單起見):Silverlight 3數據綁定子屬性不更新
<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>
我希望將TextBlock和列表框更新,每當我選擇在ComboBox一個新的項目,但事實並非如此。我相信這與TextBlock和ListBox實際綁定到SelectedCard的屬性有關,因此它正在偵聽該對象屬性的屬性更改通知。但是,我會認爲數據綁定足夠聰明,可以識別綁定表達式中的父對象已經更改並更新整個綁定。
它注意到PendingTransactions屬性(綁定到ListBox)是延遲加載的。因此,我第一次在ComboBox中選擇一個項目時,我會進行異步調用並加載列表和UI更新以顯示與所選項目相對應的信息。但是,當我重新選擇一個項目時,UI不會改變!
例如,如果我的原始列表包含三張卡片,則默認選擇第一張卡片。數據綁定確實嘗試訪問該Card對象上的PendingTransactions屬性並正確更新ListBox。如果我選擇列表中的第二張卡片,則會發生同樣的情況,並顯示該卡片的PendingTransactions列表。但是,如果我再次選擇第一張卡片,則在我的用戶界面中沒有任何變化!設置斷點,我能夠確認正在更新SelectedCard屬性。
我該如何做這項工作?
這就是我唯一的例外,即Cards屬性是ReadOnlyCollection,因爲它不會改變。 – SonOfPirate 2010-04-19 16:07:56