【发布时间】:2017-02-07 19:17:42
【问题描述】:
在我的 ListView 中查找控件 (ToggleSwitch) 时遇到问题。我已经尝试了在 SO 或网络上其他地方找到的几种方法,但似乎都没有。
这是一个 listView 标记
<ListView Name="LampsListView" ItemsSource="{x:Bind Lamps}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="models:Lamp">
<StackPanel Name="StackPanel">
<TextBlock Margin="10,0" Text="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Left" />
<ToggleSwitch Margin="10,0" HorizontalAlignment="Right" Name="LampToggleSwitch" IsOn="{x:Bind State, Converter={ StaticResource IntToIsOn}}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我尝试了ContainerFromItem,但 x 将始终为空。
foreach (var item in this.LampsListView.Items)
{
var x = this.LampsListView.ContainerFromItem(item);
}
还有 GetChildren 方法,但即使 GetChildren 返回的项目也不会给我任何我可以使用的东西。
private void FindMyStuff()
{
var ch = this.GetChildren(this.LampsListView);
}
private List<FrameworkElement> GetChildren(DependencyObject parent)
{
List<FrameworkElement> controls = new List<FrameworkElement>();
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); ++i)
{
var child = VisualTreeHelper.GetChild(parent, i);
if (child is FrameworkElement)
{
controls.Add(child as FrameworkElement);
}
controls.AddRange(this.GetChildren(child));
}
return controls;
}
我已经尝试找到StackPanel 的展位,然后直奔LampToggleSwitch。
FindMyStuff() 是在我更新了绑定到 ListView 的 ObservableCollection 之后立即调用的,并且更新是从 this.Dispatcher.RunAsync() 完成的。我不知道这是否与它的想法有关。
谁能告诉我我做错了什么?
【问题讨论】: