如何访问XAML DataTemplate Listview中的元素而不与其进行交互

我有一个C#Store应用程序并使用DataTemplate选择器来确定在绑定到Array的ListView控件中使用哪种类型的Template。 因为它是模板化的,所以我无法为每个ListView行分配动态x:名称。

我需要能够通过索引访问列表视图行并将它们的可见性设置为开或关。 我尝试过这样的东西,但是.ItemContainerGenerator .ContainerFromItem(item); 返回null ,每次都得到一个Nullableexception:

如何访问XAML DataTemplate中的控件?

经过一些研究后,似乎上述解决方案仅在我触摸或设置了SelectedItem时才有效。 看这里

为什么ItemContainerGenerator返回null?

我需要能够在页面加载(初始设置)和按钮单击上调用方法,并修改某些行可见性。

这应该做你想要的:

 var items = grid.ItemsSource as IEnumerable; foreach (var item in items) { var container = grid.ContainerFromItem(item); var button = Children(container) .Where(x => x is Button) .Select(x => x as Button) .Where(x => x.Name.Equals("MyButton")) .FirstOrDefault(); if (button == null) continue; if (item.ShouldBeVisible) button.Visibility = Visibility.Visible; else button.Visibility = Visibility.Collapsed; } 

使用这个:

 public List Children(DependencyObject parent) { var list = new List(); for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) { var child = VisualTreeHelper.GetChild(parent, i); if (child is Control) list.Add(child as Control); list.AddRange(Children(child)); } return list; } 

祝你好运!