【问题标题】:How to make a WPF ComboBox editable with custom values如何使用自定义值使 WPF 组合框可编辑
【发布时间】:2010-02-03 06:35:53
【问题描述】:

我想要一个组合框,它允许从值列表中进行选择,还允许从输入的文本中自定义值。出于显示原因,这些项目是一种复杂类型(假设组合框项目模板显示一块颜色和一个指示它是否是自定义颜色的标志)。

public class ColorLevel
{
    public decimal Intensity { get; set; }
    public bool IsCustom { get; set; }
    public Color BaseColor { get; set; }
    public override ToString() { return string.Format("{0}", Intensity*100); }
}

示例项目

var items = new [] { 
    new ColorLevel { Intensity = 0.9m, IsCustom = false, BaseColor = Color.Red },
    new ColorLevel { Intensity = 0.7m, IsCustom = false, BaseColor = Color.Red }
}

XAML

<ComboBox SelectedItem="{Binding Path=SelectedColorLevel}"
          IsEditable="true" IsTextSearchEnabled="true">
</ComboBox>

因此,当从项目列表中选择项目时,上述标记将起作用。当您使用文本搜索键入时,将选择匹配的项目。如果键入的文本与项目不匹配,则 SelectedColorLevel 设置为 null。

问题是,当键入的文本与项目不匹配时,最好在什么时候(以及如何)创建一个可以设置为 SelectedColorLevel 的新自定义项目。

例如,我想为选定的值分配一个新项目,例如

new ColorLevel { Intensity = decimal.Parse(textvalue), IsCustom = true }

或使用适当的转换器和数据绑定到 Text 属性。

【问题讨论】:

    标签: wpf data-binding combobox


    【解决方案1】:

    不确定我是否完全理解.. 您可以使用 KeyDown 事件来添加新的 ColorLevel,例如当按下 Return 时。 如果 items 是 ObservableCollection 并且您将其设置为 ComboBox 的 ItemsSource,则添加到 items 的新 ColorLevel 应该在列表中可用并成为 SelectedItem。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多