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

Ara*_*and 15 wpf combobox editing tostring

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

当您选择一个项目时,它显示为Text,它不使用DataTemplate,它只是在所选项目上调用ToString().

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

一些解决方案已经

  • 使用ValuePath绑定到对象上的属性,但如果您需要显示多于其中一个,那么运气不好.
  • 在对象上实现ToString()方法

还有另一种方法吗?

sid*_*ews 32

你可以在Xaml中完全做到这一点

<ComboBox IsTextSearchEnabled="True" IsEditable="True"
        ItemsSource="{Binding MyObjectCollection}"
        TextSearch.TextPath="MyObjectName">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding MyObjectName}" />
        </DataTemplate>
     </ComboBox.ItemTemplate>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

好处是你可以在XAML中定义和更改它,而不需要任何代码隐藏.将ItemsSource绑定到对象集合,然后将搜索基础的路径设置为TextSearch.TextPath.然后,在自定义ItemTemplate中,您可以将TextBlock绑定到对象的ToString方法之外的其他内容.

  • 如果您在该数据模板内使用多个绑定属性怎么办?我在我的上尝试过,现在当您从下拉列表中选择某些内容时,它只显示我设置为 TextSearch.TextPath 的路径。下拉列表中的项目显示正确,但所选项目显示仅显示我使用的 TextPath。 (2认同)