2011-10-06 43 views
1

我有一個綁定到ObservableDictionary(自定義類,爲簡潔起見)類的列表框。除了SelectedItem上的綁定外,它工作得很好。我有以下屬性綁定到ListBox的selectedItem。將列表框中的SelectedItem綁定到KeyValuePair <>

public KeyValuePair<Bumpstop, BumpStopOptions> SelectedBumpstop 
    { 
     get 
     { 
      return this.selectedBumpstop; 
     } 
     set 
     { 
      this.selectedBumpstop = value; 
      this.OnPropertyChanged("SelectedBumpstop"); 
     } 
    } 

當我在我的列表框中選擇一個項目時,它擊中了set屬性並且它可以工作。當我取消選擇所有的ListBox時,RedBorder會在其周圍獲得指示綁定失敗的信息,並且它不會像我所期望的那樣將SelectedBumpstop屬性設置爲null。爲什麼它沒有設置爲空?

回答

1

紅色邊框不是綁定失敗(VS輸出框中發現的綁定錯誤),這是驗證失敗。

綁定會自動檢查綁定源類型(本例中爲KeyValuePair)的新值是否可接受。沒有選定的值將意味着null作爲選定值,這對於KeyValuePair無效 - 它是一種結構,它們是值類型,因此不能包含null值。所以驗證失敗並且該值不會上傳到源代碼中。

製作類型nullableKeyValuePair<Bumpstop, BumpStopOptions>?)會解決這個問題,但它可能會對其他代碼產生影響,因此仔細考慮(您可能必須在使用屬性的任何位置添加無效檢查)。

+0

感謝您解釋這一點。這def。回答了我的問題,你的修復工作很好。 – PlTaylor

相關問題