我希望有一个组合框,允许从值列表中进行选择,并允许输入文本中的自定义值。出于显示原因,项目是一个复杂的类型(假设组合框项目模板显示一个颜色的补丁和一个标志,指示它是否是自定义颜色)。
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属性。
答案 0 :(得分:0)
不确定我是否完全理解.. 您可以使用KeyDown事件添加新的ColorLevel,例如按下Return时。 如果items是ObservableCollection并且您将其设置为ComboBox的ItemsSource,则添加到项目的新ColorLevel应该在列表中可用并成为SelectedItem。