Dynamische filter von WPF combobox basierend auf text-Eingabe
Ich kann nicht scheinen zu finden, eine direkte Methode für die Umsetzung der Filterung von text zur Eingabe in eine Liste der Elemente, die in einer WPF combobox.
Durch die Einstellung IsTextSearchEnabled auf true, wird der comboBox-dropdown springt immer der erste passende Element ist. Was ich brauche ist für die Liste gefiltert werden, um was entspricht dem text-string (z.B. Wenn ich den Fokus auf mein Kombinationsfeld, und geben Sie "abc", würde ich mag, um zu sehen, alle Elemente in der ItemsSource-Sammlung, die mit beginnen (oder vorzugsweise) 'abc', wie die Mitglieder der dropdown-Liste).
Ich bezweifle, dass es einen Unterschied macht, aber mein display Element Vorlagen, um eine Eigenschaft eines komplexen Typs :
<ComboBox x:Name="DiagnosisComboBox" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="3"
ItemsSource="{Binding Path = ApacheDxList,
UpdateSourceTrigger=PropertyChanged,
Mode=OneWay}"
IsTextSearchEnabled="True"
ItemTemplate="{StaticResource DxDescriptionTemplate}"
SelectedValue="{Binding Path = SelectedEncounterDetails.Diagnosis,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"/>
Dank.
InformationsquelleAutor Bob | 2010-01-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gerade vor ein paar Tagen mit einer modifizierten version des Codes von dieser Seite: Kredit, in dem Kredit passend ist
Mein vollständiger code unten aufgeführt:
Und der WPF sollte etwas sein, etwa so:
Ein paar Dinge hier zu beachten. Sie werden feststellen, das FilterItem Umsetzung tut ein ToString() auf dem Objekt. Dies bedeutet, dass die Eigenschaft des Objekts, das Sie anzeigen möchten, die zurückgegeben werden sollen in Ihrem Objekt.ToString () - Implementierung. (oder eine Zeichenfolge bereits) In anderen Worten so etwas wie:
Wenn dies nicht funktioniert für Ihre Bedürfnisse ich nehme an, Sie könnte den Wert der DisplayMemberPath und reflektion verwenden, um das Eigentum zu benutzen, aber das wäre langsamer, so dass ich würde nicht empfehlen, tun Sie nur, wenn notwendig.
Auch diese Implementierung NICHT aufhören, den Benutzer von der Eingabe, was Sie wollen, in die TextBox-Teil der ComboBox-Komponente. Wenn Sie der Typ etwas dumm, da Sie die SelectedItem-wieder zu NULL, so vorbereitet werden, zu behandeln, die in Ihrem code.
Auch wenn Sie viele Artikel, die ich würde empfehlen, mit der VirtualizingStackPanel wie mein Beispiel oben, denn es macht durchaus einen Unterschied in der Ladezeit
InformationsquelleAutor Kelly
Können Sie versuchen, https://www.nuget.org/packages/THEFilteredComboBox/ und feedback geben. Ich Plane, um so viel feedback wie möglich, und erstellen Sie perfekte gefilterter combobox, in der wir alle vermissen in WPF.
InformationsquelleAutor Peuczynski
Kelly ' s Antwort ist Super. Es gibt allerdings einen kleinen bug, dass, wenn Sie wählen Sie ein Element in der Liste (markieren der Eingabe von text) drücken Sie dann die Rücktaste, die Eingabe von text wieder auf das ausgewählte Element und die SelectedItem-Eigenschaft der ComboBox ist immer noch das Element, das Sie zuvor ausgewählt haben.
Unten ist der code, um den Fehler zu beheben und fügen Sie die Funktion zum automatischen wählen Sie das Element aus, wenn das input-text-Spiele.
InformationsquelleAutor YantingChen
Dies ist mein nehmen auf Sie. Einen anderen Ansatz, eine, die ich für mich gemacht haben und eine, die ich verwende. Es funktioniert mit IsTextSearchEnabled="true". Ich habe gerade abgeschlossen, so könnte es einige bugs.
Xaml:
InformationsquelleAutor Hrvoje Batrnek
Es klingt wie das, was Sie wirklich suchen, für die ist so etwas ähnliches wie eine auto-Vervollständigung Textfeld, die Sie bietet Vollendung Vorschläge in einem popup-Fenster, ähnlich einer combobox-popup.
Vielleicht finden Sie diese CodeProject Artikel hilfreich:
Eine Wiederverwendbare WPF Autocomplete TextBox
Überprüfen Sie heraus die Artikel wieder, die es bietet, für alles, was Sie benötigen. Wenn Sie möchten, um die gesamte Liste zur Verfügung, deaktivieren Sie das
MaxCompletions
- Eigenschaft, und lassen Sie Ihre filter-Prädikat immer true zurück. Zu ermöglichen, tatsächlich eine Auswahl aus der Liste müssen Sie dieBinding
- Eigenschaft auf eine der Eigenschaften der Datenobjekte in der Liste.InformationsquelleAutor Aviad P.