2010-12-13 31 views
3

我有一個列表框綁定到T類型的ObservableCollection - 每個ListBoxItem是一個複選框,與IsChecked綁定到T中的一個bool屬性。我想驗證列表框中的選中項目,以便在必須至少勾選一個複選框 - 如果沒有勾選複選框,我想在ListBox周圍顯示紅色邊框(標準驗證通知)。WPF中的列表框中的數據驗證

我該如何去做呢?我可以使用ValidatesOnDataErrors嗎?

回答

2

在揭示ObservableCollection<T>屬性的類中實現IDataErrorInfo,並且如果集合中的所有對象的布爾屬性中的值都爲false,則索引器將返回該屬性名稱的錯誤。然後在綁定的ValidationRules中使用DataErrorValidationRule

+1

我不確定你的意思。 IDataErrorInfo索引器永遠不會爲ObservableCollection屬性調用,因爲它不會更改,只有T中的值更改爲 – Paley 2010-12-14 09:22:01

+1

呃。當屬性變得有效或無效時,你必須連接一些東西來提升'PropertyChanged'。這有點麻煩。我會讓集合的包含類在集合中的項目上傾聽'PropertyChanged'(假設他們提高了它;如果他們不這樣做,那更麻煩),並且重新驗證並在其中引發自己的'PropertyChanged'事件「IsChecked」屬性(不管它的名稱)在其中一個項目上發生變化。那有意義嗎? – 2010-12-14 19:23:46

+0

從某種意義上說,我一直試圖解決這個問題2周。除了文本框之外,還有很少的信息用於驗證。我決定不打擾內置的驗證機制,它太混亂,構思也很差。感謝您的輸入。 – Paley 2010-12-20 16:20:16