我设法在GridViewItem,下面的代码的DataTemplate的访问控制:访问被命名的控件中的XAML的DataTemplate
private void btnChangePhoneNumber_Click(object sender, RoutedEventArgs e)
{
GridCell.SelectedItem = GridCell.Items[3];
var container = GridCell.ContainerFromIndex(3);
var _children = AllChildren(container);
var _control = _children.First(c => c.Name == "PhoneNumber");
_control.text = "123456789";
}
public List<TextBlock> AllChildrenText(DependencyObject parent)
{
var _List = new List<TextBlock> { };
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
var _Child = VisualTreeHelper.GetChild(parent, i);
if (_Child is TextBlock)
{
_List.Add(_Child as TextBlock);
}
_List.AddRange(AllChildrenText(_Child));
}
return _List;
}
在栅格单元是一个GridView。
这项工作..但是..
如果我实现GridView
少于40个项目它的一切权利。 如果我实现gridView
10000项,文本的变化,与法发生不同:btnChangePhoneNumber_Click
,也发生在其他项目......并且由于在btnChangePhoneNumber_Click
方法,只选择一个项目,我不能明白其中的道理。
在此先感谢。一声问候。
一个问题:什么是您的DataTemplate样子?你在使用绑定吗?如果是这样,在代码隐藏中明确设置文本时,很可能会破坏绑定。当您滚动时,这会影响其他项目,因为DataTemplate将从视图中移出并回收并重用,以提高性能。切换到x:在您的DataTemplate中绑定,这将避免绑定被破坏,或直接在模型中而不是在视图中更新绑定值。 –