WPF IsEditable = verdadeira caixa de combinação preenchido com objectos exibe o ToString () como o item seleccionado

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

Pergunta

A caixa de combinação Wpf permite editar, e isso é bom se todos os seus itens de caixa de combinação são strings, ou tem um método ToString () definido sobre eles.

Quando você seleciona um item, ele é exibido como texto, ele não usa um DataTemplate, ele só chama ToString () no item que está selecionado.

Eu recebo uma lista de itens na minha queda de combinação suspensa que são formatado usando o meu modelo de item, quando eu selecionar um i obter o nome do objeto ou seja, MyNamespace.MyObjectName

Algumas soluções têm sido

  • usar ValuePath para vincular a uma propriedade sobre o objeto, mas se você precisar sua exibição ser mais do que um dos Destes, má sorte.
  • implementar o método ToString () em seu objeto

existe outra maneira ao redor?

Foi útil?

Solução

Você pode fazer isso inteiramente dentro Xaml

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

A vantagem é que você pode definir e alterar isto contudo que você quer em seu XAML sem qualquer código. Você vincular a ItemsSource à sua coleção de objetos, em seguida, definir o caminho no qual basear a sua pesquisa para TextSearch.TextPath. Então, dentro de você costume ItemTemplate você pode vincular o TextBlock para outra coisa fora do método ToString do objeto.

Outras dicas

Você pode usar um IValueConverter para converter o "objeto" para um valor de cadeia e volta. Veja o código de exemplo na ligação IValueConverter para mais detalhes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top