2010-07-02 19 views
0

我看到一個奇怪的問題,當綁定到組合框時顯示值有時顯示空白。然而,這種情況是可重複的,並在第二次從另一個父表單打開對話時發生。如果父窗體關閉並重新打開,則第一次打開子窗口時,包含的WPF組合框將正確顯示顯示屬性。如果我然後關閉對話框並再次從同一父窗體重新啓動它,那麼即使我可以驗證ViewModel中相同的綁定屬性被擊中,ComboBox也不會顯示任何顯示值。奇怪的問題綁定到組合框,其中顯示值有時顯示爲空

<ComboBox ItemsSource="{Binding AvailableVehicles}" 
      SelectedValuePath="Value" 
      SelectedValue="{Binding SelectedVehicle, Mode=TwoWay}" 
      DisplayValuePath="Value.Model" /> 

要解釋我的視圖模型的數據結構它基本上只是一個公開的AvailableVehicles集裏面有一個對象,其類似於可空<>鍵入它封裝了一個Vehicle對象,並公開它通過一個類價值財產。每輛車都有一個模型和成本屬性。

我一直在解決這個問題的時間超過一天,我幾乎排除了一切,但這是ComboBox本身的錯誤。所以在這一點上,我希望有一個合理的解決方法,但如果有人能真正幫助指出我的代碼中的缺陷,那也會很棒。

注:

  • 我一直沒能得到這個問題更簡單的單一窗口WPF例如重現。
  • WinForms互操作場景,其中我有一個MDI父窗體和子窗體,其中可能是相關的情況下容納WPF UserControls。
  • 如果在ItemsSource或SelectedValue綁定上將IsAsync設置爲True,則問題不再發生。
  • 如果我把DisplayValuePath改成一個ItemsTemplate,並且在定義的DataTemplate中的綁定中放置了一個轉換器,我注意到傳入的值是null而不是期望的值。

回答

1

我相信問題必須與綁定到SelectedValue的對象以及被綁定到ItemsSource實際上是相同數據的不同實例,碰巧是沒有覆蓋Equals或==運算符等的類的實例。從現在我已經經歷了幾次是因爲SelectedValue或者某些情況下SelectedItem在技術上並不等於綁定的ItemsSource中的任何對象,那麼它將被忽略,並且您將在UI中顯示一個空值。

在這種特殊情況下,問題可能是我在表單關閉時重新使用選定的值,但每次打開對話框時可能都會重新生成鎖定列表。

因此,當我在我遇到的任何代碼中看到此症狀時,我首先要檢查的是要綁定的項目類型,並確保SelectedValue或SelectedItem是真正的ReferenceEquals或Equals與ItemsSource中的某個項目。現在我只是再次將這個問題記錄在對WPF中合理的綁定錯誤反饋的支持上。

1

我有同樣的問題,只有解決方案,我發現是在我的ViewModel中創建兩個屬性。一個作爲選定的值(值),但它不綁定到ComboBox,而綁定到SelectedItem的綁定(SelectedItem)。在SelectedItem getter中,我返回Values.FirstOrDefault(x => x.Value == Value),在setter中,我通過value.Value設置Value。最後,當Value在OnValueChanged屬性中發生變化時,我通知View有關SelectedItem(NotifyPropertyChanged(「SelectedItem」)的更改)...

+0

有趣的是,如果我能夠解決它,我會嘗試你在測試項目中的建議並回復給你。感謝您的輸入。 – jpierson 2011-04-14 20:20:38

+0

我想我找到了我的問題的來源,請參閱我的答案以獲取更多信息。 – jpierson 2012-08-24 14:17:58