在问题c# wpf - 无法同时设置 DisplayMemberPath 和 ItemTemplate 中,我读到您可以替换 DisplayMemberPath 以在组合框中组合多个数据项。
我使用 ItemTemplate 设置了我的 Combobox 并成功填充了它。但是,当我在 ComboBox 中选择一个项目时,会显示 Data.MaterialNumber 而不是我选择的实际文本。
MaterialNumbers 是一个 ObservableCollection<>
有人能告诉我为什么我的 ComboBox 在选择后没有正确显示该项目吗?
// 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>
Run Code Online (Sandbox Code Playgroud)
感谢这篇文章http://www.shujaat.net/2010/08/wpf-editable-combobox-with-datatemplate.html,我能够弄清楚为什么我的组合框在选择一个项目时没有正确显示。这是因为我的 ComboBox 设置为 IsEditable="True"。显然,当使用 ComboBox.ItemTemplate 并设置了 MultiBinding 时,ComboBox 无法确定要显示哪个项目,因此它会显示类。