UI虚拟化ListBox中的WPF验证

时间:2010-12-17 12:40:58

标签: wpf idataerrorinfo virtualizingstackpanel

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

据我所知,当你将ValidatesOnDataErrors=True添加到Binding时,每次解析Binding时(每次teh值都会改变,可能是焦点丢失时),Binding引擎检查绑定来源,通过IDataErrorInfo,访问界面,找出是否有错误。

听起来不错,只有一点需要注意。为了验证数据,需要进行渲染。如果您的ObservableCollection该实体恰好绑定到ListBox VirtualizingStackPanel.IsVirtualizing=True,则只会验证呈现的项目。由于大多数项目都在视口之外,因此不会渲染它们。

如何强制验证每件商品?删除UI虚拟化不是一种选择。

1 个答案:

答案 0 :(得分:0)

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

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

这样,我得到了所有项目的清单。我将列表滚动到该列表中的每个项目。我更新布局,因为我认为ScrollIntoView是异步的。之后,每个项目都已呈现,每个绑定都已执行,并且每个验证都已经过评估。

那里有更好的方法吗?