一千萬個為什麽

搜索

Silverlight 3數據綁定子屬性不會更新

我有一個Silverlight控件,它有我的根ViewModel對象作為它的數據源。 ViewModel公開了一個Cards列表以及一個SelectedCard屬性,該屬性綁定到視圖頂部的下拉列表。然後我在底部有一種形式的分類,顯示了SelectedCard的屬性。我的XAML顯示為(簡化為簡化):


  
  
  

每當我在ComboBox中選擇一個新項時,我都希望TextBlock和ListBox能夠更新,但事實並非如此。我確定它與TextBlock和ListBox實際上綁定到SelectedCard的屬性這一事實有關,因此它正在偵聽該對象上屬性的屬性更改通知。但是,我認為數據綁定足夠聰明,可以識別綁定表達式中的父對象已更改並更新整個綁定。

需要註意的是PendingTransactions屬性(綁定到ListBox)是延遲加載的。因此,我第一次在ComboBox中選擇一個項目時,我會進行異步調用並加載列表和UI更新以顯示與所選項目相對應的信息。但是,當我重新選擇一個項目時,UI不會改變!

例如,如果我的原始列表包含三張卡,我默認選擇第一張卡。數據綁定確實嘗試訪問該Card對象上的PendingTransactions屬性並正確更新ListBox。如果我在列表中選擇第二張卡片,則會發生同樣的事情,我會顯示該卡片的PendingTransactions列表。但是,如果我再次選擇第一張卡片,我的UI中沒有任何變化!設置斷點,我能夠確認正確更新了SelectedCard屬性。

我該怎麽做才能做到這一點?

最佳答案

結果問題根本不在UI中。 PendingTransactions類使用對服務器的異步WCF調用來延遲加載其值。異步模式使用事件通知調用者操作已完成,因此可以將數據解析到類中。因為每個Card都有自己的PendingTransactions類實例,並且我們使用ServiceFactory來管理我們的WCF代理,所以每個實例都將它們的事件處理程序連接到同一個事件(出於性能原因,我們正在使用單例方法 - 暫時) 。因此,每次實例觸發異步操作時,每個實例都會收到該事件。

這意味著數據綁定工作正常。每次查看新卡時,PendingTransactions系列都會覆蓋自己。因此,看起來選擇之前的卡片沒有做任何事情,事實上,它正在選擇正確的綁定對象,這是被搞砸的數據並使其看起來沒有任何變化。

感謝您的建議和指導!

轉載註明原文: Silverlight 3數據綁定子屬性不會更新