UI虚拟化列表框内的WPF验证

UI虚拟化列表框内的WPF验证,wpf,idataerrorinfo,virtualizingstackpanel,Wpf,Idataerrorinfo,Virtualizingstackpanel,我需要在我正在开发的WPF应用程序中进行某种数据验证 据我所知,当您向绑定中添加validateSondaErrors=True时,每当绑定被解析时(可以是每次值更改时,也可以是焦点丢失时),绑定引擎都会检查绑定源,通过IDataErrorInfo,访问接口,找出是否有错误 听起来不错,只有一个警告。为了验证数据,需要呈现数据。如果您碰巧将该实体的可观察集合绑定到带有虚拟化StackPanel的列表框。isvirtualization=True,则仅验证渲染项。由于大多数项目位于视口之外,因此不

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

据我所知,当您向绑定中添加
validateSondaErrors=True
时,每当绑定被解析时(可以是每次值更改时,也可以是焦点丢失时),绑定引擎都会检查绑定源,通过
IDataErrorInfo
,访问接口,找出是否有错误

听起来不错,只有一个警告。为了验证数据,需要呈现数据。如果您碰巧将该实体的
可观察集合
绑定到带有
虚拟化StackPanel的
列表框
。isvirtualization=True
,则仅验证渲染项。由于大多数项目位于视口之外,因此不会渲染它们


如何强制验证每个项目?删除UI虚拟化不是一个选项。

我找到了一种方法。很难看。但它是有效的。假设UI虚拟化列表是myList

for (Int32 i = 0; i < myList.Items.Count; i++)
{
     myList.ScrollIntoView(myList.Items[i]);
}
UpdateLayout();
for(Int32 i=0;i
这样,我就得到了所有项目的列表。我将列表滚动到列表中的每个项目。我更新布局,因为我认为ScrollIntoView是异步的。之后,每个项目都已呈现,每个绑定都已执行,每个验证都已评估

有更好的办法吗