2010-12-17 60 views
0

我需要做一些數據驗證在WPF應用程序,我發展WPF驗證內部UI虛擬化的ListBox

據我知道,當你添加ValidatesOnDataErrors=True到綁定,每次綁定解決(它可以每當teh值改變時,它可以在焦點丟失時),綁定引擎檢查綁定源,通過IDataErrorInfo,訪問接口,找出是否有錯誤。

聽起來不錯,只有一個警告。爲了使數據得到驗證,它需要被渲染。如果您碰巧將該實體的ObservableCollection綁定到ListBoxVirtualizingStackPanel.IsVirtualizing=True,則只會呈現項目進行驗證。由於大多數項目在視口外,因此不會呈現。

如何強制每個項目進行驗證?刪除UI虛擬化不是一種選擇。

回答

0

我找到了一種方法。它很醜。但它的工作。假設UI虛擬化列表是myList

for (Int32 i = 0; i < myList.Items.Count; i++) 
{ 
    myList.ScrollIntoView(myList.Items[i]); 
} 
UpdateLayout(); 

這樣,我得到所有項目的列表。我將列表滾動到該列表中的每個項目。我想更新佈局,因爲ScrollIntoView是異步的。之後,每個項目都被渲染,每個綁定已經被執行並且每個驗證都被評估過。

那裏有更好的方法嗎?