WPF IsEditable = true ComboBox mit Objekten gefüllt zeigt die ToString () als das ausgewählte Element

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

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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top