我有一个ComboBox,它绑定了一个DataTable。ComboBox显示了一个值列表,这些值是从DataTable的"wellId"列中提取的。ComboBox还被样式化,以便我可以通过向DataTable添加一个wellId字段设置为"(settings)"的虚拟行来将自定义项插入列表中。
<ComboBox IsEditable="True" Name="comboWell" ItemsSource="{Binding}">
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="Content" Value="{Binding wellId}" />
<Style.Triggers>
<DataTrigger Binding="{Binding wellId}" Value="(settings)">
<Setter Property="Content" Value="Customize..." />
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
大多数情况下,这个方法都很好用。它会显示一个列表,列表中的所有项(包括虚拟项)都可以在下拉列表中进行选择。
然而,在从列表中选择一个项之后,无论它是真实项还是虚拟项,ComboBox都不能正确地显示所选项。它不会显示与下拉列表中相同的值(DataTable中的“wellId”列),而是只显示字符串“System.Data.DataRowView”。无论我选择什么,它总是显示相同的东西。
如果我特别将ComboBox的DisplayMemberPath设置为“wellId”,那么它就会正确地显示所选项。然而,这会破坏我应用的所有其他样式,导致下拉列表中填充了空白条目。
我该如何让ComboBox正确地显示选定的项?