我需要在我正在开发的WPF应用程序中进行某种数据验证
据我所知,当你将ValidatesOnDataErrors=True
添加到Binding时,每次解析Binding时(每次teh值都会改变,可能是焦点丢失时),Binding引擎检查绑定来源,通过IDataErrorInfo
,访问界面,找出是否有错误。
听起来不错,只有一点需要注意。为了验证数据,需要进行渲染。如果您的ObservableCollection
该实体恰好绑定到ListBox
VirtualizingStackPanel.IsVirtualizing=True
,则只会验证呈现的项目。由于大多数项目都在视口之外,因此不会渲染它们。
如何强制验证每件商品?删除UI虚拟化不是一种选择。
答案 0 :(得分:0)
我找到了一种方法。它很丑。但它的确有效。假设UI虚拟化列表是myList
for (Int32 i = 0; i < myList.Items.Count; i++)
{
myList.ScrollIntoView(myList.Items[i]);
}
UpdateLayout();
这样,我得到了所有项目的清单。我将列表滚动到该列表中的每个项目。我更新布局,因为我认为ScrollIntoView是异步的。之后,每个项目都已呈现,每个绑定都已执行,并且每个验证都已经过评估。
那里有更好的方法吗?