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

StackOverflow https://stackoverflow.com/questions/1844156

Вопрос

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

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

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

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

  • используйте 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 к своей коллекции объектов, а затем задаете путь, на котором будет основываться ваш поиск, к TextSearch.textPath.Затем в вашем пользовательском ItemTemplate вы можете привязать TextBlock к чему-то другому за пределами метода toString объекта.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top