WPF Multicolumn Combobox

combobox, multiple-columns, wpf

Solution

Instead of `ItemTemplate`, use `ItemContainerStyle`:

<ComboBox.ItemContainerStyle>
    <Style TargetType="ComboBoxItem">
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <Grid Height="23" Width="Auto" ShowGridLines="False">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="100"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>

                        <TextBlock Grid.Column="0" Text="{Binding Code}"/>
                        <TextBlock Grid.Column="1" Text="{Binding Carrier}"/>
                    </Grid>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ComboBox.ItemContainerStyle>

Also, set `DisplayMemberPath` to `Code` property.

Problem

I have the following data template used for a multicolumn combo box: ``` <DataTemplate x:Key="ShipViaKey"> <Grid Height="23" Width="Auto" ShowGridLines="False"> <Grid.ColumnDefinitions> <ColumnDefinition Width="100"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" Text="{Binding Code}"/> <TextBlock Grid.Column="1" Text="{Binding Carrier}"/> </Grid> </DataTemplate> ``` The combo box is defined like this: ``` <ComboBox Grid.Row="0" Grid.Column="1" x:Name="CboShipVia" SelectedValue="{Binding FkCarrier, Mode=TwoWay}" SelectedValuePath="PkCarrier" IsEnabled="{Binding HasData}" ItemTemplate="{StaticResource ShipViaKey}"/> ``` This is all fine; except I want to only display the "Code" of the selected item in the combo box, not both values. Is there a way to do this?

Original source