ListView
の中にコントロール(ToggleSwitch)が見つかりません。私はSOまたはWeb上の他の場所でいくつかの方法を試してみましたが、どれもうまくいかないようです。ここで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は常にnullになります。
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()
から行われます。私はこれがそれとは何か関係があるかどうかは分かりません。
私が間違っていることを教えてもらえますか?
最後の行を書いてうれしいです。それは 'GetChildren()'の前に 'UpdateLayout()'を追加しようとしました - 今はうまくいきます。 –