我有一个ObservableCollection
,当我想用ObservableCollection
显示这个CheckBox
时,我只是将内容绑定到CheckBox
,但是当我想显示相同内容时使用ComboBox
收集我无法做到这一点。有什么建议吗?
XAML:使用CheckBox
--WORKS
<ItemsControl ItemsSource="{Binding Synonyms}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<!--Display items in CheckBox-->
<CheckBox Content="{Binding Display}" Margin="10,0,0,0" /> // Display is the collection.
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
输出:
XAML:使用ComboBox
显示集合 - 不在此处
<ItemsControl ItemsSource="{Binding Synonyms}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<!--Display items in ComboBox.-->
Approach - 1
<ComboBox>
<ComboBoxItem Content="{Binding Display}"/>
</ComboBox>
Approach - 2
<ComboBox ItemsSource="{Binding Path=Synonyms}" DisplayMemberPath="Display"/>
Approach - 3
<ComboBox >
<ComboBox.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Green" BorderThickness="1" Padding="5">
<TextBlock Text="{Binding Path=Display,StringFormat='Display: {0}'}" />
</Border>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
输出:
我想在oneComboBox中使用Select All选项显示项目(一,二,三等)。我尝试了几种方法,但没有。我在这里缺少什么?
答案 0 :(得分:1)
与Combobox不同,该复选框不能容纳多个项目,因此实现为复选框设计的系统与组合框无关。
要解决您的问题,请从ItemsControl
中移除组合框并使其独立:
<ComboBox ItemsSource="{Binding Synonyms}" DisplayMemberPath="Display"/>
告诉组合框将其ItemsSource
绑定到未指定的数据上下文,这是好的,因此它获取它的父级数据上下文。该过程以 up 的方式运行到每个父节点,直到找到绑定的数据上下文(很可能是页面对VM实例的datacontext)。
假设数据上下文在可视树中的某个点有效,它将绑定到该实例并查找名为Synonyms
的属性。从Synonyms
属性中,它将使用作为列表来显示项目。
要在组合框中显示(显示)文本(而不是默认为项目的ToString()
),组合框将显示项目属性Display
中的字符串。
在一个下拉列表中提供项目列表。
答案 1 :(得分:1)
简短的回答是,您应该使用 ComboBox 作为根元素,而不是 ItemsControl 。 CompboBox只是ItemsControl的专用版本。
<ComboBox ItemsSource="{Binding Synonyms}" DisplayMemberPath="Display"/>
答案越长。
ComboBox派生自ItemsControl,因此您可以获得基类的所有功能以及其他功能。
ItemsControl(及其派生类)提供了一种在UI中重复一组数据的方法。您可以在DataTemplate中为每个&#34; row&#34;指定所需的UI。同义词来源中的数据。
您正在做的是要求Silverlight为每个基础数据行创建一个单独的ComboBox。
您仍然可以在ComboBox中使用DataTemplate。像这样。
<ComboBox ItemsSource="{Binding Synonyms}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<!--Display items in CheckBox-->
<TextBox Text="{Binding Display}"
Margin="10,0,0,0"
FontWeight="Bold" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>