我在一个列表框中有一个列表框,并且两者都绑定到一个可观察的集合。我已经为两者重载了 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....
}
在应用程序中,它列出了机箱,每个机箱都有一个服务器列表。用户可以选择一个 Enclosure,我可以根据 SelectedIndex 从 Elist 中获取 Enclosure(我使用 ElementAt(SelectedIndex))。当我尝试从嵌套列表框中获取其中一个服务器时,事情变得更加棘手。我希望能够选择列表中的一台服务器并从可观察的集合 Slist 中获取服务器。问题是当用户直接选择服务器时,我不知道服务器来自 Elist 中的哪个 Enclosure,而且我无法获取 SelectedIndex,因为我无法从后面的代码中的嵌套列表框中引用任何内容>.< 确实是一个非常令人沮丧的问题……有人有什么想法吗?
如果我可以在代码中获取嵌套列表框中的项目,那也会很有帮助。