0

開発中の WPF アプリケーションで何らかのデータ検証を行う必要があります

私の知る限り、Binding に追加ValidatesOnDataErrors=Trueすると、Binding が解決されるたびに (値が変更されるたびに、フォーカスが失われたときに可能性があります)、Binding エンジンはバインディング ソースをチェックし、 を通じてIDataErrorInfo、インターフェイスにアクセスし、エラーがあるかどうかを調べます。

1 つだけ注意点があります。データを検証するには、レンダリングする必要があります。ObservableCollectionそのエンティティの が wi​​th にバインドされているListBox場合、VirtualizingStackPanel.IsVirtualizing=Trueレンダリングされたアイテムのみが検証されます。ほとんどのアイテムはビューポートの外にあるため、レンダリングされません。

すべてのアイテムを強制的に検証するにはどうすればよいですか? UI の仮想化を削除することはできません。

4

1 に答える 1

0

私はそうする一つの方法を見つけました。それは醜いです。しかし、それは機能します。UI の仮想化されたリストが myList であると仮定します

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

そうすれば、すべてのアイテムのリストを取得できます。そのリスト内のすべての項目までリストをスクロールします。ScrollIntoView は非同期なので、レイアウトを更新します。その後、すべてのアイテムがレンダリングされ、すべてのバインディングが実行され、すべての検証が評価されました。

そこにもっと良い方法はありますか?

于 2010-12-17T13:09:24.850 に答える