我想创建一个带有组头的分组ComboBox
,该组头不仅绑定了组的名称,还绑定了ComboBox
的'ItemsSource'所依据的值的其他属性同样。
CollectionViewSource
用作ComboBox
es ItemsSource
:
<CollectionViewSource x:Key="Tools" Source="{Binding AvailableTools}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Toolbox" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
我分组的属性不是字符串属性,而是自定义类型的对象。 CollectionViewSource
显然会创建组,并为每个组指定[object by which is group].ToString()
的名称,在我的示例中生成属性Toolbox
的类型名称。
这是组合:
<ComboBox
SelectedItem="{Binding SelectedTool, Mode=TwoWay}"
Margin="10,0,0,0"
Width="40"
ItemsSource="{Binding Source={StaticResource Tools}}">
<ComboBox .GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate DataType="CollectionViewGroup">
<Grid Background="{StaticResource LighterBackgroundBrush}">
<TextBlock Text="{Binding Name}"/>
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ComboBox .GroupStyle>
<ComboBox.ItemTemplate>
<DataTemplate DataType="viewModels1:ToolSelectionItem">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Tool.ToolIcon}" Width="16" />
<TextBlock Text="{Binding ToolName}" Margin="10,0,0,0"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
在标题模板中,我可以绑定到组名,但没有别的。我想要实现的是绑定到创建组的对象而不仅仅是ToString()
结果。即我所在的Toolbox
属性的值包含类型Icon
的{{1}}属性,我想将其绑定到标题模板中的图像以在组头中显示此图标。 这可以完成吗?如果是,那怎么办?
这个问题有点难以解释,请问,如果我不够清楚......