可能有一种更简单的方法可以做到这一点,但这里有一个可行的选择:
1) 遍历项目列表。
因为你使用的是items source,所以ListBox.Items
会引用ItemsSource中的数据item。
for (int i = 0; i < ListBox.Items.Count; i++)
{
// do work as follows below...
}
2) 获取这些物品的容器。
DependencyObject obj = ListBox.ItemContainerGenerator.ContainerFromIndex(i);
3) 使用 VisualTreeHelper 搜索容器视觉对象的 TextBox 子项。
TextBox box = FindVisualChild<TextBox>(obj);
使用此函数搜索正确类型的可视子项:
public static childItem FindVisualChild<childItem>(DependencyObject obj)
where childItem : DependencyObject
{
// Search immediate children
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child is childItem)
return (childItem)child;
else
{
childItem childOfChild = FindVisualChild<childItem>(child);
if (childOfChild != null)
return childOfChild;
}
}
return null;
}
4) 最后,检查 TextBox 上的绑定。
全部放在一起,是这样的:
private bool ValidateList(ListBox lb)
{
for (int i = 0; i < lb.Items.Count; i++)
{
DependencyObject obj = lb.ItemContainerGenerator.ContainerFromIndex(i);
TextBox box = FindVisualChild<TextBox>(obj);
if (!TestBinding(box))
return false;
}
return true;
}