You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xceed CheckComboBox勾选项目后Text属性不显示选定内容求助

Xceed CheckComboBox勾选后不显示选中项文本的解决办法

问题概述

使用Xceed Extended WPF Toolkit的CheckComboBox控件,将SelectedItemsOverride绑定到SelectedFilterParameters列表后,用户勾选项目并关闭下拉框,控件文本区域仍为空,无法显示已勾选的项目内容。

已验证前置条件

  • 窗口其他数据绑定功能正常运行
  • DisplayMemberPath="ValueToString"指向的属性可在<TextBlock>中正常显示内容
  • ItemsSource绑定成功,下拉选项能正常加载
  • 已为SelectedFilterParameters属性添加RaisePropertyChanged()通知

解决方案

1. 替换集合类型为ObservableCollection

IList未实现INotifyCollectionChanged接口,当集合内元素增减时,CheckComboBox无法感知变化。将SelectedFilterParameters的类型改为ObservableCollection<ParameterValueData>:

private ObservableCollection<ParameterValueData> selectedFilterParameters;

/// <summary>
/// 用户通过复选框选中的参数值,后续按OR规则分配给筛选器
/// </summary>
public ObservableCollection<ParameterValueData> SelectedFilterParameters 
{
    get { return selectedFilterParameters; } 
    set 
    { 
        selectedFilterParameters = value;
        RaisePropertyChanged();
    } 
}

注意:在ViewModel构造函数中初始化集合:

public YourViewModel()
{
    SelectedFilterParameters = new ObservableCollection<ParameterValueData>();
}

2. 确保ParameterValueData类的ValueToString属性正确实现通知

检查ParameterValueData类,确保ValueToString是公共属性,且类实现INotifyPropertyChanged(若属性值会动态更新):

public class ParameterValueData : INotifyPropertyChanged
{
    private string _valueToString;
    public string ValueToString
    {
        get => _valueToString;
        set
        {
            _valueToString = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

3. 移除冲突的ItemTemplate(可选)

同时设置DisplayMemberPath和ItemTemplate可能导致选中项文本渲染异常。如果你的ItemTemplate仅用于显示ValueToString,可直接移除该部分,让控件默认处理选中项的文本拼接:

修改后的XAML代码:

<xctk:CheckComboBox
    ItemsSource="{Binding ParameterValueList, UpdateSourceTrigger=PropertyChanged}"
    Delimiter=", "
    Width="200"
    SelectedItemsOverride="{Binding SelectedFilterParameters, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
    DisplayMemberPath="ValueToString"
/>

预期效果

完成上述调整后,控件将正常显示选中项文本,例如:CON18+5 Plaster, CON18+7 Plaster, CON20+2 Plaster

内容的提问来源于stack exchange,提问作者IdoBa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 06:33:23