2010-05-28 93 views
2

我想知道人們如何在驗證WPF中的集合。比方說,我有一個可觀察的ViewModel集合,我綁定到網格的項目源,並且用戶可以向網格添加新行並需要填充它們。驗證WPF中的集合元素

首先,我需要在每一行上進行驗證,以確保填充每個ViewModel的必填字段。這對每行都很好,很簡單。

但是,驗證的第二個級別是整個集合。例如,我想確保集合中沒有兩行具有相同的標識符,或者沒有兩行具有相同的名稱。我基本上檢查不同的行內重複的屬性。我還有更復雜的條件,我必須確保集合中至少有一個項目具有某些屬性。

我該如何得到一個驗證規則,這將允許我檢查這些規則,驗證整個集合而不是單個項目。我還想打印datagrid上方的任何驗證錯誤,以便用戶可以修復該問題,並且隨着用戶修復每個不同的規則,消息將更新或消失。

任何人有任何正確的方法來做到這一點的經驗?

回答

2

訣竅是放置您的集合驗證邏輯,以便在ItemsControl的ItemsSource屬性更改時調用它。如果在視圖模型上使用IDataErrorInfo,則在ItemsSource綁定上設置ValidatesOnDataErrors = True,並在綁定的集合屬性名稱傳遞到接口的錯誤索引器時,運行邏輯以確定該屬性是否仍然有效。如果您使用自定義驗證規則,那麼將規則放入ItemsSource綁定應該沒問題。

接下來,在視圖模型中,每當發生更改集合的有效/無效狀態的事件時,引發ItemsSource綁定屬性的PropertyChanged事件。例如,如果集合需要一定數量的元素,請收聽CollectionChanged事件。每當集合發生更改時,都會引發ItemsSource綁定屬性的PropertyChanged事件。這告訴WPF該屬性發生了變化,這導致了它的重新驗證。因此,只要集合發生更改,集合驗證邏輯就會運行,如果集合無效,WPF將顯示錯誤裝飾器,或者如果集合有效,則WPF將移除裝飾器。