在两个ListBox中的一个中基于Selection选择更改ContentControl的绑定

时间:2011-03-22 21:47:12

标签: c# wpf

我在一个窗口中有两个ListBox控件。每个都是与不同StaticResources绑定的患者过敏列表。在窗口的底部,我有一个ContentControl,它在上面的列表中显示有关所选过敏症的其他信息。

screenshot of XAML window with two ListBox controls and a ContentControl for showing details

目前,我有两个ContentControl,每个列表框一个,都有Visiblity="Collapsed"。当用户进行选择时,我将关联的内容控件可见并折叠另一个。我想只有一个内容控件并更改其绑定。

到目前为止,我已经尝试过以下各项而没有运气:

this.ExpandedAllergyDetails.Content = "InsideAllergiesSource";
this.ExpandedAllergyDetails.SetBinding(ContentControl.ContentProperty, "InsideAllergiesSource");
this.ExpandedAllergyDetails.SetBinding(ContentControl.ContentProperty, new Binding());
this.ExpandedAllergyDetails.SetResourceReference(ContentControl.ContentProperty, this.Resources["InsideAllergiesSource"]);
this.ExpandedAllergyDetails.SetResourceReference(ContentControl.ContentProperty, this.FindResource("InsideAllergiesSource"));

在每种情况下,我都试图只使用一个名为ExpandedAllergyDetails的ContentControl,并将其绑定更改为“InsideAllergiesSource”,这是XAML中定义的CollectionViewSource。

2 个答案:

答案 0 :(得分:0)

SetResourceReference接受一个键,而不是实际的对象。所以你要用

this.ExpandedAllergyDetails.SetResourceReference(ContentControl.ContentProperty, "InsideAllergiesSource");

如果“InsideAllergiesSource”是资源的x:Key。我不确定这会绑定到“当前”项目。

答案 1 :(得分:0)

您可以将这两个列表作为项目包装在ListBox中,这样当选择一个过敏时,也会选择相应的主列表,这样您就可以绑定到选择路径,即{{1 }}。不确定这是如何转换为您的特定应用程序代码,但这是一个场景的工作示例,请注意自动选择父列表所需的样式。该示例包含两个列表和一个显示所选项目的TextBlock。

SelectedMainList -> SelectedAllergy

您可能希望屏蔽两个主要列表的选择,this answer应该有帮助。


编辑:由于上面样式中的触发器也会在键盘焦点从列表内部移开时取消选择主列表,您可能希望将其更改为仅在触发器触发时执行,这可以通过触发器<TextBlock Text="{Binding ElementName=TestLB, Path=SelectedItem.Content.SelectedItem.Content}"/> <ListBox Name="TestLB"> <ListBox.Resources> <Style TargetType="ListBoxItem"> <Style.Triggers> <Trigger Property="IsKeyboardFocusWithin" Value="True"> <Setter Property="IsSelected" Value="True"/> </Trigger> </Style.Triggers> </Style> </ListBox.Resources> <ListBox.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel Orientation="Horizontal"/> </ItemsPanelTemplate> </ListBox.ItemsPanel> <ListBoxItem> <ListBox> <ListBoxItem>List1-Item1</ListBoxItem> <ListBoxItem>List1-Item2</ListBoxItem> <ListBoxItem>List1-Item3</ListBoxItem> </ListBox> </ListBoxItem> <ListBoxItem> <ListBox> <ListBoxItem>List2-Item1</ListBoxItem> <ListBoxItem>List2-Item2</ListBoxItem> <ListBoxItem>List2-Item3</ListBoxItem> </ListBox> </ListBoxItem> </ListBox> 中的单帧动画来完成。

EnterActions