我想使用组合框来输入纯整数值。
在我的应用程序中,一些数字值具有特殊含义,但可以输入任何数字值(键入)。
因此,组合框必须显示一个带有向右的下拉箭头的编辑字段。
如果单击下拉箭头,则下拉列表必须呈现那些具有特殊含义的特殊数字值的解释(字符串)列表(例如“103-等待下一个回合”)。
如果用户从下拉列表中单击条目(而不是直接输入相应的值),则必须将相应的数字值传输到编辑字段。
我尝试了以下内容:
- 我将ComboBox的IsEditable属性设置为true - 我将ItemsSource属性绑定到一个对象集合,这些对象具有数字属性(命名为“Value”)和字符串属性(命名为“Explanation”)。 - 我将DisplayMemberPath属性设置为“Explanation”(上述字符串属性的名称)
有了这些,我可以自由地键入任何我喜欢的数字,并且每个特殊数字的字符串解释都会正确显示在下拉列表中。这正是我想要的。
然而,当我从下拉列表中选择一个解释时,传输到编辑字段的是解释字符串,而不是相应的数字值。
问题:如何使组合框在我从下拉列表中点击项目时传输数字属性(“Value”)而不是解释文本?
在我的应用程序中,一些数字值具有特殊含义,但可以输入任何数字值(键入)。
因此,组合框必须显示一个带有向右的下拉箭头的编辑字段。
如果单击下拉箭头,则下拉列表必须呈现那些具有特殊含义的特殊数字值的解释(字符串)列表(例如“103-等待下一个回合”)。
如果用户从下拉列表中单击条目(而不是直接输入相应的值),则必须将相应的数字值传输到编辑字段。
我尝试了以下内容:
- 我将ComboBox的IsEditable属性设置为true - 我将ItemsSource属性绑定到一个对象集合,这些对象具有数字属性(命名为“Value”)和字符串属性(命名为“Explanation”)。 - 我将DisplayMemberPath属性设置为“Explanation”(上述字符串属性的名称)
有了这些,我可以自由地键入任何我喜欢的数字,并且每个特殊数字的字符串解释都会正确显示在下拉列表中。这正是我想要的。
然而,当我从下拉列表中选择一个解释时,传输到编辑字段的是解释字符串,而不是相应的数字值。
问题:如何使组合框在我从下拉列表中点击项目时传输数字属性(“Value”)而不是解释文本?
DisplayMemberPath
。由于ComboBox是一个ItemsControl,为了在下拉列表中显示说明部分,只需要创建一个DataTemplate(其数据类型设置为ItemsSource集合中对象的类型!)并使用TextBlock或类似绑定来绑定Explanation
属性。现在,在选择下拉列表中的项时(不使用DisplayMemberPath),放置在编辑字段中的值是该项的字符串表示形式。因此,在Value/Explanation对象类型中,重写ToString
方法使其返回Value。 - user2819245