【发布时间】:2019-04-17 23:16:20
【问题描述】:
我想使用组合框输入纯整数值。
在我的应用中,有些数值有特殊的含义,但是任何数值都必须能够输入(输入)。
因此,组合框必须显示一个右侧带有下拉箭头的编辑字段。
如果单击下拉箭头,下拉列表必须为那些具有特殊含义的特殊数值(例如"103 - Wait for next turn")显示解释(字符串)列表。
如果用户点击下拉列表中的条目(而不是直接输入相应的值),则必须将相应的数值转移到编辑字段。
我尝试了以下方法:
- 我将 ComboBox 的
IsEditable属性设置为 true - 我将
ItemsSource属性绑定到具有数字属性(名为"Value")和字符串属性(名为"Explanation")的对象集合。 - 我将
DisplayMemberPath属性设置为"Explanation"(上面字符串属性的名称)
有了它,我可以随意输入任何我喜欢的数字,并且每个特殊数字的字符串解释都正确显示在下拉列表中。这正是我想要的。
但是,当我从下拉列表中选择一种解释时,解释字符串会被传送到编辑字段,不是对应的数值.
问题:如何让组合框在单击下拉列表中的项目时传输数字属性("Value")而不是说明文本?
【问题讨论】:
-
好的,以下内容有点骇人听闻:不要使用
DisplayMemberPath。由于 ComboBox 是一个 ItemsControl,因此要在下拉列表中显示解释部分,只需创建一个 DataTemplate(其数据类型设置为 ItemsSource 集合中的对象类型!),并使用 TextBlock 或类似的绑定Explanation属性。现在,当在下拉列表中选择一个项目(不使用 DisplayMemberPath)时,放置在编辑字段中的值是该项目的字符串表示形式。因此,在 Value/Explanation 对象类型中,重写ToString方法,使其返回 Value。 -
是的,这确实很骇人听闻,但是嘿 - 它有效!除非出现不那么老套的解决方案,否则我会将其标记为答案。现在只剩下一件小事:当我开始输入一个数字时,组合框会尝试为每个击键从下拉列表中提取一个可能的数字。有没有办法避免这种情况?
-
添加一个空项作为下拉列表的第一项。
-
请看下面我的回答。我有一些好消息和一些坏消息。首先是坏消息:我很抱歉让您无缘无故地覆盖 ToString()。没有必要。现在好消息:不必修改“特殊值”类并重写 ToString()。 ;-b