【发布时间】: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