Подтвердить что ты не робот

WPF IsEditable = true ComboBox, заполненный объектами, отображает ToString() в качестве выбранного элемента

Поле со списком Wpf позволяет редактировать, и это нормально, если все ваши элементы со списком являются строками или имеют метод ToString(), определенный на них.

Когда вы выбираете элемент, он отображается как текст, он не использует DataTemplate, он просто вызывает ToString() для выбранного элемента.

Я получаю список элементов в моем раскрывающемся списке, которые отформатированы с использованием моего шаблона элемента, когда я выбираю один, я получаю имя объекта i.e. MyNamespace.MyObjectName

Некоторые решения были

  • использовать ValuePath для привязки к свойству на объект, но если вам потребуется ваш дисплей будет более чем одним из эти, неудачи.
  • реализовать метод ToString() на ваш объект

есть ли другой способ?

4b9b3361

Ответ 1

Вы можете сделать это полностью в 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 объекта.

Ответ 2

Вы можете использовать IValueConverter для преобразования "объекта" в строковое значение и обратно. Подробнее см. Пример кода в ссылке IValueConverter.