我使用 CompositeCollection & CollectionContainer 为组合框提供默认值,但问题是实际数据显示为类的完整路径。
有没有办法在类中选择一个字段来表示呢?因此,它将显示一个字符串属性,而不是 StMaryChurchAttendance.Models.Groups
。
这是 xaml:
<StackPanel Orientation="Horizontal" DataContext="{Binding SelectionBarDataContext}" Name="SearchPanel">
<Label>Group : </Label>
<ComboBox Name="SelectionBarGroupsComboBox">
<ComboBox.Resources>
<CompositeCollection x:Key="CompositeCollection">
<CollectionContainer Collection="{Binding Source={x:Reference SearchPanel}, Path=DataContext.Groups }" />
</CompositeCollection>
</ComboBox.Resources>
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem Name="AllGroupItem" IsSelected="True">All Groups</ComboBoxItem>
<CollectionContainer Collection="{Binding Source={StaticResource CompositeCollection}}" />
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
</StackPanel>
最佳答案
通常,这是可行的:
<ComboBox
DisplayMemberPath="WhateverPropertyYouWant"
Name="SelectionBarGroupsComboBox">
将 WhateverPropertyYouWant
替换为您要显示的属性 -- StMaryChurchAttendance.Models.Group
的一些属性。不要使用绑定(bind)。只需在引号之间键入属性名称。
但是你已经混合了不同的东西,所以这次它不会起作用。这是另一个选项:为您的 Group
类创建一个隐式 DataTemplate
,它只在 ComboBox
中可见。 ComboBox
将使用它来显示 Groups
,而不会影响任何其他内容。
<ComboBox
Name="SelectionBarGroupsComboBox">
<ComboBox.ItemTemplate>
<DataTemplate
xmlns:models="clr-namespace:StMaryChurchAttendance.Models"
DataType="models:Group">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox.Resources>
<CompositeCollection x:Key="CompositeCollection">
<CollectionContainer Collection="{Binding Source={x:Reference SearchPanel}, Path=DataContext.Groups}" />
</CompositeCollection>
</ComboBox.Resources>
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem Name="AllGroupItem" IsSelected="True">All Groups</ComboBoxItem>
<CollectionContainer Collection="{Binding Source={StaticResource CompositeCollection}}" />
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
关于c# - WPF 组合框集合容器显示的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40293376/