Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ComboBox.ItemTemplate not displaying selection properly

Tags:

c#

xaml

In the question c# wpf - cannot set both DisplayMemberPath and ItemTemplate, I have read that you can replace the DisplayMemberPath to combine multiple data items in a ComboBox.

I set up my Combobox using ItemTemplate and it is successfully populated. But when I select an item in my ComboBox, I get Data.MaterialNumber displayed instead of the actual text I selected.

MaterialNumbers is an ObservableCollection<>

Can someone tell me why my ComboBox is not displaying the item correctly after it is selected?

// Binding from my ViewModel, which retrieves material numbers correctly.
ObservableCollection<MaterialNumber> MaterialNumbers = GetMaterialNumbers();

<ComboBox Grid.Row="0" Grid.Column="1" ItemsSource="{Binding MaterialNumbers}"
    SelectedItem="{Binding MaterialNumber}"
    Validation.Error="View_Validator" Validation.ErrorTemplate="{StaticResource ErrorTemplateBorder}"
    IsEnabled="{Binding IsEnabled}" IsEditable="True" IsReadOnly="True" Margin="0,10,0,0">
    <ComboBox.ItemTemplate>
    <DataTemplate>
        <TextBlock>
            <TextBlock.Text>
            <MultiBinding StringFormat="{}{0}: {1}">
                <Binding Path="Program.Name" />
                <Binding Path="MaterialNumberString" />
                <Binding UpdateSourceTrigger="PropertyChanged" />
                <Binding NotifyOnValidationError="True" />
                <Binding ValidatesOnDataErrors="True" />
            </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>
like image 693
Wannabe Coder Avatar asked Jan 10 '23 20:01

Wannabe Coder


1 Answers

Thanks to this article http://www.shujaat.net/2010/08/wpf-editable-combobox-with-datatemplate.html, I was able to figure out why my ComboBox did not display correctly when an item was selected. It is because my ComboBox was set to IsEditable="True". Apparently, when using a ComboBox.ItemTemplate and having MultiBinding set, the ComboBox cannot determine which item to display so it displays the class instead.

like image 151
Wannabe Coder Avatar answered Jan 25 '23 23:01

Wannabe Coder