リストボックス内にリストボックスがあり、両方が監視可能なコレクションにバインドされています。両方の SelectionChanged イベントをオーバーロードしました。ネストされたリストボックスの場合、データ テンプレートにいくつかのラベルがあります。それらのラベルの内容を取得できるようにしたい。x:name プロパティが定義されていても、コードビハインドでそれらのいずれも参照できないため、難しいだけです。誰にもアイデアはありますか?
<ListBox Grid.Row="5" x:Name="lb1" ItemsSource="{Binding}" DataContext="{Binding}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectionChanged="lb1_SelectionChanged">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Label x:Name="txtEnclosure" Content="{Binding Path=EnclosureID}"/>
<......other labels bound to other properties...>
<ListBox x:Name="lbserver" ItemsSource="{Binding Path=Slist}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Label x:Name="txtSlot" Content="{Binding Path=Slot}" />
<Label x:Name="txtServer" Content="{Binding Path=HostnameID}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
親リストボックスは、Elist という監視可能なコレクション (Enclosures の監視可能なコレクション、私が定義したクラス) にバインドします。
this.DataContext = Settings.Elist;
そして、子リストボックスは Enclosure クラス内の監視可能なコレクションにバインドします。
public class Enclosure
{
public ObservableCollection<Server> Slist { get; set; }
...contains other variables as well....
}
アプリケーションでは、エンクロージャーがリストされ、各エンクロージャーにはサーバーのリストがあります。ユーザーはエンクロージャを選択でき、SelectedIndex に基づいて Elist からエンクロージャを取得できます (ElementAt(SelectedIndex) を使用します)。ネストされたリストボックスからサーバーの 1 つを取得しようとすると、事態はさらに複雑になります。リスト内のサーバーの 1 つを選択し、監視可能なコレクション Slist からサーバーを取得できるようにしたいと考えています。問題は、ユーザーがサーバーを直接選択すると、サーバーが Elist のどのエンクロージャからのものかわからないことです。また、コード ビハインドのネストされたリストボックスから何も参照できないため、SelectedIndex を取得できません。 >.< 確かに非常に苛立たしい問題です...誰かアイデアはありますか?
入れ子になったリストボックスの項目をコードで取得できれば、それも役に立ちます。