c# - 如何使 wpf 组合框拉出特殊属性

标签 c# wpf combobox binding

我想使用组合框来输入普通整数值。

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

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

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

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

我尝试了以下方法:

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

有了它,我可以随意输入任何我喜欢的数字,每个特殊数字的字符串解释都正确地显示在下拉列表中。这正是我想要的。

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

问题:当我从下拉列表中单击一个项目时,如何让组合框传递数字属性("Value")而不是解释文本?

最佳答案

使用数据模板在下拉列表中显示说明文本。

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

如果 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>

关于c# - 如何使 wpf 组合框拉出特殊属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53309524/

相关文章:

c# - 使用 RijndaelManaged 时出现 CryptographicException

Extjs 组合默认值?

c# - CSharp .NET 3.5 Windows 窗体数据绑定(bind)组合框到列表<>

C# - 将字符串数据转换为实际的字符串表示形式

c# - 如何使用 StructureMap 摆脱代码中的 ObjectFactory

c# - WPF/MVVM - 检查基于字符串匹配的 MenuItem

ComboBox 中的 WPF IsEditable - 如何删除自动完成

c# - WPF 数据网格多选

c# - 组合框问题c#

c# - .net core 2 的编码问题