WPF IsEditable = true ComboBox mit Objekten gefüllt zeigt die ToString () als das ausgewählte Element
Frage
Die Wpf Combo-Box ermöglicht die Bearbeitung, und das ist in Ordnung, wenn alle Kombinationsfeldelemente Strings sind, oder haben eine Methode ToString () auf sich definiert ist.
Wenn Sie ein Element auswählen, wird als Text angezeigt wird, ist es nicht ein Datatemplate nicht verwendet, ruft sie nur ToString () auf das Element, das ausgewählt wird.
Ich erhalte eine Liste der Elemente in meiner Combo Dropdown, dass mein Artikel Vorlage formatiert sind, wenn ich eine auswählen bekomme ich den Namen des Objekts d MyNamespace.MyObjectName
Einige Lösungen wurden
- verwenden ValuePath auf eine Eigenschaft zu binden auf das Objekt, aber wenn Sie benötigen Ihre Anzeige zu sein, mehr als ein diese, Pech.
- implementieren die Methode ToString () auf Ihre Aufgabe
gibt es eine andere Art und Weise um?
Lösung
Sie können dies tun, ganz im XAML
<ComboBox IsTextSearchEnabled="True" IsEditable="True"
ItemsSource="{Binding MyObjectCollection}"
TextSearch.TextPath="MyObjectName">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding MyObjectName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Der Vorteil ist, dass Sie diese jedoch festlegen und ändern, können Sie ohne Code-behind in XAML wollen. Sie binden die Itemssource zu Ihrer Sammlung von Objekten, und legen Sie den Pfad, auf dem Sie Ihre Suche auf TextSearch.TextPath zu stützen. Dann innerhalb Sie benutzerdefinierte itemtemplate können Sie den Textblock an etwas binden, auch außerhalb der ToString-Methode des Objekts.
Andere Tipps
Sie können eine IValueConverter das „Objekt“ in einen String-Wert zu konvertieren und zurück. Siehe Beispiel-Code in dem IValueConverter Link für weitere Informationen.