我使用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>
答案 0 :(得分:1)
通常,这有效:
<ComboBox
DisplayMemberPath="WhateverPropertyYouWant"
Name="SelectionBarGroupsComboBox">
将WhateverPropertyYouWant
替换为您要显示的属性 - StMaryChurchAttendance.Models.Group
的某些属性。不要使用绑定。只需在引号之间键入属性的名称即可。
但是你在那里混合了不同的东西,所以这次不会起作用。这是另一个选项:为DataTemplate
类创建隐式Group
,这只在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>
答案 1 :(得分:0)
在Ed Plunkett的答案中设置的方式给我带来了绑定错误,所以这就是我解决它的方法。我还使用了DataTemplate
,但我设置它以便隐式设置DataTemplate
而不是显式设置。也许这与我在Separator
中放置ComboBox
的事实有关。
首先,确保设置类型所在的命名空间
xmlns:models="clr-namespace:StMaryChurchAttendance.Models"
然后,为此类型设置DataTemplate
。
<ComboBox Name="SelectionBarGroupsComboBox">
<ComboBox.Resources>
<CompositeCollection x:Key="CompositeCollection">
<CollectionContainer Collection="{Binding Source={x:Reference SearchPanel}, Path=DataContext.Groups}" />
</CompositeCollection>
<DataTemplate DataType="{x:Type models:Group}">
TextBlock Text="{Binding Name}" />
</DataTemplate>
</ComboBox.Resources>
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem Name="AllGroupItem" IsSelected="True">All Groups</ComboBoxItem>
<CollectionContainer Collection="{Binding Source={StaticResource CompositeCollection}}" />
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
只要绑定了Group类型的对象,就会使用DataTemplate
。否则,它将被忽略。