0

我需要在我正在开发的 WPF 应用程序中进行某种数据验证

据我所知,当你添加ValidatesOnDataErrors=True到 Binding 时,每次 Binding 被解析(可能是每次值变化时,也可能是失去焦点时),Binding 引擎检查绑定源,通过IDataErrorInfo,访问接口,找出是否有错误。

听起来不错,只有一个警告。为了验证数据,需要对其进行渲染。如果您碰巧ObservableCollection将该实体中的一个绑定到ListBoxwith 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 回答