WPF IsEditable=true 填充对象的 ComboBox 将 ToString() 显示为所选项目

2024-02-18

Wpf 组合框允许编辑,如果所有组合框项目都是字符串,或者在它们上定义了 ToString() 方法,那么这很好。

当您选择一个项目时,它显示为文本,它不使用 DataTemplate,它只是对所选项目调用 ToString()。

我在组合下拉列表中得到一个使用我的项目模板格式化的项目列表,当我选择一个项目时,我会得到该对象的名称,即MyNamespace.MyObjectName

一些解决方案已经

  • 使用 ValuePath 绑定到属性 在物体上,但如果你需要 您的显示器不只之一 这些,运气不好。
  • 实现 ToString() 方法 你的对象

还有其他办法吗?


您可以完全在 Xaml 中完成此操作

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

好处是您可以在 XAML 中根据需要定义和更改此设置,而无需任何代码隐藏。您将 ItemsSource 绑定到对象集合,然后设置搜索的路径文本搜索.文本路径 https://learn.microsoft.com/dotnet/api/system.windows.controls.textsearch.textpath。然后,在自定义 ItemTemplate 中,您可以将 TextBlock 绑定到对象的 ToString 方法之外的其他内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF IsEditable=true 填充对象的 ComboBox 将 ToString() 显示为所选项目 的相关文章