20

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

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

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

一些解决方案已经

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

还有其他方法吗?

4

2 回答 2

36

您可以完全在 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 绑定到您的对象集合,然后将搜索的路径设置为TextSearch.TextPath。然后,在您自定义的 ItemTemplate 中,您可以将 TextBlock 绑定到对象的 ToString 方法之外的其他内容。

于 2010-02-18T15:50:17.397 回答
3

您可以使用IValueConverter将“对象”转换为字符串值并返回。有关详细信息,请参阅 IValueConverter 链接中的示例代码。

于 2009-12-04T00:55:27.360 回答