私はGridViewItem、次のコードのDataTemplateでコントロールにアクセスするために管理:グリッドセルは、GridViewのあるアクセス名前付きコントロール内の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;
}
。
この作品..しかし..
私はそれがすべての権利未満40の項目でGridView
を実装する場合。 を10000個のアイテムで実装した場合とは異なり、メソッドで発生するテキストの変更:btnChangePhoneNumber_Click
は他のアイテムでも発生します。理由はわかりません。btnChangePhoneNumber_Click
メソッドでは1つのアイテムのみが選択されます。
ありがとうございます。挨拶。
質問:DataTemplateの外観はどうなっていますか?バインディングを使用していますか?その場合は、コードビハインドでテキストを明示的に設定するときにバインディングを破る可能性が最も高いです。これは、パフォーマンスを向上させるために、DataTemplateがリサイクルされ、ビューから移動するときに再利用されるため、スクロールするときに他のアイテムに影響します。バインディングが壊れるのを避けるDataTemplateのx:Bindに切り替えるか、またはビューの代わりにモデルで直接バインドされた値を更新します。 –