WPF IsEditable = true ComboBox lleno de objetos muestra el ToString () como el elemento seleccionado

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

Pregunta

El cuadro combinado Wpf permite la edición, y esto está muy bien si todos los elementos de cuadro combinado son cadenas, o tener un método ToString () definido en ellos.

Cuando se selecciona un elemento, se muestra como texto, que no utiliza un DataTemplate, que sólo llama a ToString () en el elemento que está seleccionado.

consigo una lista de artículos en mi combo Desplegar que están formateados usando mi plantilla de elementos, cuando seleccione uno me sale el nombre del objeto es decir, MyNamespace.MyObjectName

Algunas soluciones han sido

  • valuePath utilizar para unirse a una propiedad en el objeto, pero si requiere la pantalla sea más que una de éstos, la mala suerte.
  • implementar el método ToString () en el objeto

¿hay otra manera alrededor?

¿Fue útil?

Solución

Usted puede hacer esto por completo dentro Xaml

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

La ventaja es que se puede definir y cambiar esto sin embargo que desee en su XAML sin ningún tipo de código subyacente. Enlazar el ItemsSource a su colección de objetos, y luego se establece la ruta en la que basar su búsqueda a TextSearch.TextPath. Luego, dentro de ti itemtemplate personalizada que puede obligar a la TextBlock a otra cosa fuera del método ToString del objeto.

Otros consejos

Puede utilizar un IValueConverter para convertir el "objeto" a un valor de cadena y la espalda. Ver el código de ejemplo en el enlace IValueConverter para más detalles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top