数据绑定的WPF ComboBox未显示选定的值

3

我有一个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正确地显示选定的项?
1个回答

1
将您的ComboBox更改为设置ItemTemplate而不是ItemContainerStyle,并删除IsEditable=True。如果IsEditable=True,则SelectedItem将显示在TextBox中,如果TextBox.Text绑定到一个项目,则它将显示该项的.ToString()。
<ComboBox Name="comboWell" ItemsSource="{Binding }">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <ContentControl>
                <ContentControl.Style>
                    <Style TargetType="{x:Type ContentControl}">
                        <Setter Property="Content" Value="{Binding wellId}" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding wellId}" Value="(settings)">
                                <Setter Property="Content" Value="Customize..." />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </ContentControl.Style>
            </ContentControl>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

有没有办法在不移除IsEditable=True的情况下实现它?能够输入项目名称的一部分以在列表中找到它是我需要保留的功能。 - Nairou
我决定采取另一种方法来解决这个问题。感谢您对这个问题的回答! - Nairou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接