WPF IsEditable = true ComboBox pieni di oggetti mostra ToString () come elemento selezionato

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

Domanda

La casella combinata WPF permette l'editing, e questo va bene se tutti i tuoi elementi della casella combinata sono stringhe, o di avere un metodo ToString () definito su di loro.

Quando si seleziona una voce, viene visualizzato come testo, non fa uso di un DataTemplate, semplicemente chiama ToString () sulla voce selezionata.

ho un elenco di oggetti nel mio combo cadere verso il basso che vengono formattati utilizzando il mio modello di elemento, quando seleziono un'ottengo il nome dell'oggetto vale a dire MyNamespace.MyObjectName

Alcune soluzioni sono state

  • utilizzare ValuePath di legarsi a una proprietà sull'oggetto, ma se avete bisogno di il display ad essere più di uno di questi, la sfortuna.
  • implementare il metodo ToString () su l'oggetto

c'è un altro modo per aggirare?

È stato utile?

Soluzione

È possibile farlo interamente all'interno Xaml

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

Il vantaggio è che è possibile definire e modificare questo però che vuoi nel tuo XAML senza code-behind. Si associa l'ItemsSource alla vostra collezione di oggetti, e poi si imposta il percorso su cui basare la ricerca a TextSearch.TextPath. Poi, dentro di voi ItemTemplate personalizzato è possibile associare il TextBlock a qualcos'altro al di fuori del metodo ToString dell'oggetto.

Altri suggerimenti

È possibile utilizzare un IValueConverter per convertire l ' "oggetto" per un valore di stringa e viceversa. Vedere il codice di esempio nel collegamento IValueConverter per i dettagli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top