如何使 Combobox(自定义 DataTemplate)中的 SelectedItem 仅显示项目的特定属性

Posted

技术标签:

【中文标题】如何使 Combobox(自定义 DataTemplate)中的 SelectedItem 仅显示项目的特定属性【英文标题】:How to make the SelectedItem in Combobox(customize DataTemplate) shows only specific property of the item 【发布时间】:2021-02-26 15:32:24 【问题描述】:

我有一个显示信息列表的ComboBox

NameOfEstablishment BIN Owner BusinessAddress

...看起来像这样:

代码:

<ComboBox x:Name="BploList" 
          Text="Binding Search" 
          SelectedItem="Binding SearchSelected"
          Grid.Row="0"
          Grid.Column="0" 
          Grid.ColumnSpan="2" 
          FontSize="16" 
          materialDesign:HintAssist.Hint="Search"
          Margin="5 5 65 5" 
          IsEditable="True">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical">
                <TextBlock Text="Binding NameOfEstablishment" FontSize="12" Foreground="#D8AC6A"
                           TextWrapping="Wrap" MaxWidth="250" />
                <TextBlock Text="Binding BIN" FontSize="11" TextWrapping="Wrap" MaxWidth="250" />
                <TextBlock Text="Binding Owner" FontSize="11" TextWrapping="Wrap" MaxWidth="250" />
                <TextBlock Text="Binding BusinessAddress" FontSize="11" TextWrapping="Wrap" MaxWidth="250" />
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>

问题

SelectedItem 应该显示NameOfEstablishment,但它却显示为完整对象

关于ComboBox的来源

private BindingList<BPLOSearchModel> _bploList;

        public BindingList<BPLOSearchModel> BploList
        
            get  return _bploList; 
            set 
            
                _bploList = value;
                NotifyOfPropertyChange(() => BploList);
            
        

BPLOSearchModel 的属性

public class BPLOSearchModel
    
        public string BIN  get; set; 
        public string NameOfEstablishment  get; set; 
        public string BusinessAddress  get; set; 
        public string Owner  get; set; 
    

至于 SearchSelected

    private string _searchSelected;

    public string SearchSelected
    
        get  return _searchSelected; 
        set 
        
            _searchSelected = value;
            NotifyOfPropertyChange(() => SearchSelected);
        
    

【问题讨论】:

@MickyD 好的,已编辑。 感谢您的编辑 【参考方案1】:

这正是SelectedValuePath 的用途。它用于

获取或设置用于获取 SelectedItem 的 SelectedValue 的路径

在你的情况下,设置它像

<ComboBox ... SelectedValuePath="NameOfEstablishment" ... />

请注意,微软也有一个很好的How to。

【讨论】:

以上是关于如何使 Combobox(自定义 DataTemplate)中的 SelectedItem 仅显示项目的特定属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QML 的自定义 ComboBox 中突出显示所选项目?

C# 如何在一个Datagridview 的 某一个cell里面 绑定一个自定义的combobox

c# comboBox控件绑定表字段问题。如何同时绑定多个comboBox呢,使其下拉列表的内容都是一样的 见详细补充

Magnolia Combobox 自定义不显示

如何在ComboBox中添加“空”选择?

C#WPF ComboBox复杂的自定义弹出数据显示