gpt4 book ai didi

c# - 数据绑定(bind) WPF ComboBox 不显示选定值

转载 作者:行者123 更新时间:2023-11-30 18:03:04 24 4
gpt4 key购买 nike

我有一个组合框,绑定(bind)到一个数据表。 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 正确显示所选项目?

最佳答案

更改 ComboBox 以设置 ItemTemplate 而不是 ItemContainerStyle,并删除 IsEditable=True。如果 IsEditable=TrueSelectedItem 将显示在 TextBox 中,如果 TextBox.Text 绑定(bind)到一个项目,它将显示 .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>

关于c# - 数据绑定(bind) WPF ComboBox 不显示选定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com