如何使WPF组合框具有特殊属性

时间:2018-11-14 22:13:05

标签: c# wpf combobox binding

我想使用组合框输入纯整数值。

在我的应用程序中,某些数值具有特殊含义,但是必须能够输入(键入)任何数值。

因此,组合框必须在右侧显示一个带有下拉箭头的编辑字段。

如果单击下拉箭头,则下拉菜单必须显示具有特殊含义的那些特殊数值的解释(字符串)列表(例如"103 - Wait for next turn"

如果用户单击下拉列表中的条目(而不是直接键入相应的值),则必须将相应的数值传送到编辑字段。

我尝试了以下方法:

  • 我将ComboBox的IsEditable属性设置为true
  • 我将ItemsSource属性绑定到同时具有数字属性(名为"Value")和字符串属性(名为"Explanation")的对象的集合。
  • 我将DisplayMemberPath属性设置为"Explanation"(上面的字符串属性的名称)

有了这个,我可以自由地键入任何我喜欢的数字,并且每个特殊数字的字符串说明会正确显示在下拉列表中。这正是我想要的。

但是,当我从下拉列表中选择一种解释时,是解释字符串被传送到编辑字段,而 not 则是相应的数值

问题:当我从下拉列表中单击某项时,如何使组合框传递数字属性("Value")而不是说明文本?

1 个答案:

答案 0 :(得分:0)

使用数据模板在下拉菜单中显示说明文字。

要在文本编辑字段中显示值,请将ComboBox的附加属性TextSearch.TextPath设置为“特殊值”类型中value属性的名称。

如果ComboBox在输入数字时不应自动完成可能的特殊值,请将其IsTextSearchEnabled属性设置为 false 。 (请注意,如果您恰巧在编辑字段中输入一个特殊值,也会在下拉列表中自动选择特殊值。)

因此,ComboBox的定义应类似于此:

<ComboBox ItemsSource="{Binding ...}"
          IsEditable="True"
          TextSearch.TextPath="Value"
          IsTextSearchEnabled="False">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Explanation}" />
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>