具有分组和自定义组标题的ComboBox

时间:2015-04-02 10:05:34

标签: c# wpf combobox

我想创建一个带有组头的分组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}}属性,我想将其绑定到标题模板中的图像以在组头中显示此图标。 这可以完成吗?如果是,那怎么办?

这个问题有点难以解释,请问,如果我不够清楚......

0 个答案:

没有答案