ComboBox Performace

  • WPF

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    ComboBox Performace

    Hallo miteinander,

    ich probiere gerade eine ehemalige Access-Anwendung in Visual Studio in .Net neu zu programmieren.

    Eigentlich hielt ich ja WPF für die neuere und Zukunftssichere Plattform und bin mit meinem Projekt auch schon ein ganzes Stück vorwärts gekommen, bis...

    Ja bis ich die Performance eines ComboBox-Controlls in WPF in Aktion erlebte.

    Wenn ich eine ComboBox in Windows.Forms mit einer Datenliste von ca. 7000 Datensätzen fülle, dann öffnet sich die DropDown-Liste fast verzögerungsfrei.
    Das selbe in WPF ist eine knappe Katastrophe, beim ersten öffnen dauert es fast 2 Sekunden, bis die Liste angezeigt wird, bei weiteren "Öffnungen" wird es etwas schneller, aber auch nicht berühmt.

    WPF kann natürlich viel mehr und viel schöner und viel (was weiß ich....), aber...

    Ich bin drauf und dran, diese Verzögerung als KO-Kriterium für WPf zu verstehen, mit so einer Verzögerung kann ich das weder selbst verwenden, noch Kunden anbieten.

    CBElement ist eine Klasse mit den zwei Propertys Name und Key.

    Zunächst fülle ich eine ObservaleCollection oder ein List(Of CBElement) mit den Daten aus der Datenbank, was keine nennenswerten Verzögerungen bedeutet.

    In WPF habe ich die ComboBox an eine ObservableCollection oder List(Of CBElement) gebunden und dabei keinen großen Unterschied feststellen können.
    Das gleiche in WinForms mit List(Of CBElement)

    Beides funktioniert, nur die Verzögerung bei WPF .... hatte ich schon gesagt, dass das ziemlich langsam ist?

    Ist hier jemand, der der WPF noch eine Chance geben kann und mir erkläre will, wie ich auch bei WPF "den Turbo einlegen kann".
    Evtl. indem die DropDownliste bereits angezeigt wird, während im Hintergrund noch Daten geladen werden.
    Allerdings darf es nicht passieren, dass der Anwender nach "Xanthippe" sucht und die Meldung "Nicht enthalten" erhält, weil die ComboBox noch nicht alle Daten geladen hatte.
    Vermutlich werden die Daten hier eher gerendert als geladen.

    Liebe Grüße
    Johannes

    PS:
    Gibt es für WPF so etwas wie ein "Classic Template", mit dem sämtliche WPF Controls das gleiche Verhalten und Design wie Windows.Forms zeigen.
    Ich habe keine Erfahrung mit WPF, allerdings unter WinForms ähnliche Probleme mit großen Datenquellen für ComboBoxen gehabt (40.000+ Items).

    Verwendest du AutoCompleteMode und AutoCompleteSource? Wenn ja, setz die vor dem Zuweisen der DataSource auf None und nachdem die Daten drin sind auf deine gewünschten Werte.
    Das hat zumindest mir unter WinForms enorm viel gebracht.
    Was will man denn mit einer Combo mit 7000 item drinne?
    Imo für die Auswahl aus solcher Datenmenge braucht man andere Controls.
    Hier habich mal ein Konzept + proof of concept dafür gebastelt, aber WinForms:
    AutoCompletion advanced

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Hallo

    Wie im anderen Thread schon erklärt (Ich werde diesen übrigens in den WPF Bereichverschieben) gehe ich mit ErfinderDesRades konform - 7000 Einträge in einer comboBox zeigt das du etwas machst was für den User keinen Sinn macht. Aber gut.

    Ich habe dir auch erklärt das dein Performanceproblem mehrere Uhrsachen haben kann. z.b. das hier in diesem Fall die Virtualisierung nicht greift. Deshalb habe ich dich gebeten ein kleines Beispiel zu erstellen das dein Problem reproduziert. Haste leider nicht angehängt.
    Nun ja, ich habe leider nicht die Zeit dir das abzunehmen.

    Grüße
    Sascha

    EDIT:
    Allerdings

    Johannes schrieb:

    Evtl. indem die DropDownliste bereits angezeigt wird, während im Hintergrund noch Daten geladen werden.

    Was nun. Ist die ComboBox nun langsahm, also werdend ie einträge langsam gerendert oder brauchst du zu lange um die Daten zu laden?
    Das gilt es für dich selbst mal herauszufinden. Bei letzterem hat es ja nichts mit WPF oder der ComboBox zu tun.


    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    Hallo Sascha, hallo "ErfinderDesRades" und BlueLagoonX

    hier habe ich etwas gefunden, was zu diesem Thema passt.
    docs.microsoft.com/en-us/dotne…w=netframeworkdesktop-4.8

    7000 Einträge in einer comboBox zeigt, dass du etwas machst was für den User keinen Sinn macht


    Das verstehe ich nicht. Eine ComboBox, in der ich alle PLZ-Ort-Kombinationen Deutschlands anbiete, und der Anwender nach 3 oder 4 Ziffern nur noch zwei oder dreimal hoch / runter scrollt, sowas finde ich extrem bequem. Unter ein paar tausend Adressen mit wenigen Buchstaben und ein paar "Hoch/Runter" die richtige Adresse zu finden (oder auch zu sehen, dass es die Person nicht gibt, das funktioniert in Access seit Jahren und ist sehr Anwenderfreundlich (Praxiserfahrung!)

    Eine ComboBox ist die Kombination aus einer Textbox, einer Schaltfläche und einem StackPanel (plus etwas Gehirnschmalz). Etwas abstrakt gedacht also nicht viel anderes, als dein DemoBeispiel mit den Fahrzeugen. Wenn du also 16000 Fahrzeuge darstellen willst, so hast du das selbe Performanzproblem wie ich in der ComboBox, nämlich dass die WPF alle Daten in den Grafikspeicher rendert, obwohl immer nur eine Handvoll Datensätze angezeigt werden. Wenn die Daten- und die Anzeigelogik besser getrennt wären, so könnten bei 10 darstellbaren Datensätzen die 10 vorherigen und 10 nachfolgenden Datensätze gerendert werden, die eigentliche Bearbeitungslogik würde aber auf "unsichtbaren Daten" erfolgen, was viel schneller geht.

    Nach dem Microsoft-Text muss ich die ComboBox also dahingehend ändern, dass das StackPanel der Combobox durch ein VirtualizingStackPanel ersetzt wird.
    Im Prinzip habe ich das schon verstanden, wie das gehen soll.... Dass ich die ComboBox jetzt neu erfinden muss, das ist schon etwas befremdlich.

    PS: ListView, ListBox und TreeView verwenden virtualization per Default.

    Ach so, und wenn ich sowieso dabei bin, die ComboBox "neu zu erfinden", dann kann ich hier auch den Button überladen und als Lupe darstellen, so habe ich dann meine "SearchBox", mit der ich dem Andwender verspreche, seine Daten in Ruhe zu lassen und nur ein "Gehe zu Datensatz" auszuführen.

    Danke für euer Mitdenken
    Johannes

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Johannes“ ()

    Johannes schrieb:

    hier habe ich etwas gefunden, was zu diesem Thema passt.

    Wie schon von mir erwähnt - Them Virtualisierung was in dem MS Beitrag auch erwähnt wird.

    Johannes schrieb:

    Eine ComboBox, in der ich alle PLZ-Ort-Kombinationen Deutschlands anbiete

    Das macht man aber dann mit einer Auto-Complete Textbox. Gebe ich die ersten Ziffern ein lade ich aus der DB schon nur noch die PLZ die mit diesen Ziffern beginnen. Habe also garnicht so viele PLZ im Ram.
    Der Ort wird dann vervollständigt anhand der PLZ (Oder umgekehrt, das sollte ja auch klappen wenn ich nur den Ort weis).

    Johannes schrieb:

    Wenn du also 16000 Fahrzeuge darstellen willst, so hast du das selbe Performanzproblem wie ich in der ComboBox, nämlich dass die WPF alle Daten in den Grafikspeicher rendert, obwohl immer nur eine Handvoll Datensätze angezeigt werden.

    1. lade ich keine 16000 Fahrzeuge. Niemals. Keiner Scrollt 16000 Fahrzeuge durch. Und ich spreche auch aus Erfahrung. Ich habe für meinen Arbeitgeber (Autokonzern) schon einiges gemacht und es wird IMMER vorselektiert so das nur noch eine Hand voll Datensätze aus der DB geladen werden.

    Johannes schrieb:

    Im Prinzip habe ich das schon verstanden, wie das gehen soll.... Dass ich die ComboBox jetzt neu erfinden muss, das ist schon etwas befremdlich.

    Du musst nichts neu erfinden, wie du im Nachtrag geschrieben hast verwenden einige Controls von Haus aus Virtualisierung. Aber genau deshalb wollte ich ein Beispiel von dir sehen. Damit ich eben sehe was für XAML und welche Daten du hast. Die Virtualisierung greift nämlich unter gewissen umständen nicht. Das kann verschiedene Gründe haben aber schnell erklärt - kann die WPF die resultierende Größe eines Eintrags nicht vorberechnen (z.b. wegen Triggern) greift keine Virtualisierung.

    Es läuft also vermutlich leider wieder darauf hinaus das wir wissen müssten was du da genau versuchst und was du hast. Zum einen gibt es evtl. einen besseren Weg (wenn du aufgeschlossen für sowas bist) oder es gibt die möglichkeit die Virtualisierung wieder einzuschalten und damit wäre dein Performanceproblem auf jeden Fall aus der Welt.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Wenn es dir reicht kann ich gerne ein Beispiel machen mit Dummy-Daten, die sind leicht generiert, aber die Frage ist ob dir das was bringt denn im Endeffekt werde ich die Virtualisierung haben.

    Wie wäre es mit dem XAML und einem Codeschnipsel wie du die ObservableCollection befüllst, das würde zum nachvollziehen ja schon reichen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ich verstehe @Johannes. Ich verstehe aber auch euch anderen "gelernten" Programmierer.

    Johannes denkt in ("was sieht der User und wie kann der User die Anwendung optimal, ohne Verzögerung und ohne 'Schönheitsfehler' nutzen").
    Ihr Profi-Programmierer denkt in ("wie bekomme ich sauberen code" und "die Vezögerung ist doch ganz normal" und "so ist es richtig") ;-).

    7000 Einträge in einer Combobox sind zwar nicht alltäglich, aber im Anwendungsbereich von @Johannes passt das. PLZ und Orte in Comboboxen funktioniert in Winforms einwandfrei und superschnell. Und ehrlich, warum soll man eine Combobox "neu erfinden"? Nur weil es MS nicht schafft das in WPF gscheit umzusetzen?

    Ich selbst bin auch bemüht Dinge zu verwenden die "programmiertechnisch richtig" wären. Aber wenn dann die .NET Funktionen selbst das Problem dabei sind, dann muss man zu unkonventionellen Mitteln greifen. Der Anweder sieht von all dem nichts. Der sieht nur die schöne, sofort auf eingaben reagierende Oberfläche.

    Jaja, der dive26 schon wieder - werdet Ihr Euch wohl denken ;-).

    @Johannes
    Mit viel Modifikation bekommt man eine Combobox auch in winforms schön hin. Siehe mein Screenshot mit einem Image-Dropdown. Schade, dass sowas von MS nicht von "Werk aus" implementiert ist und man es erst mühsam mit Imagelists und Modifikationen hinbekommen. Aber egal.

    Was Dir möglicherweise helfen könnte ist ein anderer Ansatz für PLZ und Orte.
    Ich habe in meinen neueren Anwendungen jeweils eine Textbox für PLZ und Ort und wenn man eine PLZ oder einen Ort eingibt (oder nur einen Teil davon) und Enter drückt, dann blendet sich eine Listview mit der Auswahl ein. Dort kann man dann auf einen Eintrag klicken und PLZ+Ort werden in die Textboxen eingetragen.
    Die PLZ und Orte liest einfach in ein String-Array ein welches Du vergleichst und bei Enter einfach in die Listbox füllst. Ich habe immer PLZ und Orte von Deutschland, Österreich und der Schweiz in meinen Datenbanken.

    Ein Video wie das bei mir aussieht findest Du hier: bonit.at/temp/plz.mp4
    Bilder
    • 12022021103250.jpg

      72,34 kB, 254×579, 135 mal angesehen
    • 12022021103408.jpg

      68,29 kB, 391×230, 136 mal angesehen
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „dive26“ ()

    @dive26 mal abgesehen davon das dein Post etwas am Problem oder der Fragestellung vorbeigeht gebe ich dir recht in dem Punkt das man das Rad nicht neu erfinden muss.
    Aber.. die WPF ist in vielen Bereichen sogar performanter als WinForm und zwar um einiges und das MS es nicht hinbekommt stimmt so auch nicht.
    Solange man (wie es in WinForms der Fall ist) lediglich "normale" Einträge in der Combobox rendert ist ja auch alles gut. Implementiert man aber sein eigenes Template muss man zusehen das dies nicht dazu führt das die Virtualisierung abgeschaltet wird, die Gründe habe ich bereits erklärt.

    Aber solange sich der Johannes den Ist-Zustand und Code aus der Nase ziehen lässt kann man auch keine Lösungen presentieren.
    Ich weis nicht warum du jetzt so wehement gegen "uns programmierer" sprechen musst. Hier wird versucht (zumindest von meiner Seite) den TE unter die Arme zu greifen.
    Ich weis wie das bei mir ist. Sehr oft kommt es vor das ich einen Weg gehe bei dem ich zum Zeitpunkt des Entwurfs der Meinung bin das dieser gut für den Enduser ist und sich ein Programm so gut Bedienen lässt.
    Dann kommt es aber dennoch oft vor das sich jemand aussenstehender das ganze ansieht uns meint "ich würde es intuitiver so oder so finde" und wenn man offen für solche Vorschläge ist kommt man des öfteren zu dem Entschluss das er recht hat.

    Ich will Johannes auch nicht sagen das er es anders machen soll, es soll nur ein Vorschlag sein - es liegt ja bei ihm.
    Und ja, die WPF kann auch locker so viele Einträge in eine ComboBox packen, das ist nicht das Thema. Das Thema ist das wir keine Infos haben WIE diese Einträge gerendert werden und so lange kann und WILL ich keine Auskünfte geben weil diese vermutlich schlicht falsch wären, wenn ich nicht weis was hier genau gemacht wird.

    So. Und jetzt wäre es gut wenn wir wieder beim Thema bleiben (und zwar bei der WPF und nicht bei WinForms) und zusehen das wir Johannes helfen können, denn dafür ist dieser Thread da.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo ihr lieben,
    Streitet nicht! Obwohl ich es schön finde, wenn jemand versucht, meine Sprach zu versehen ^^

    In meinen Recherchen habe ich folgendes Codefragment gefunden, dass für mich zunächst das Performanzproblem löst.

    XML-Quellcode

    1. <ComboBox>
    2. <ComboBox.ItemsPanel>
    3. <ItemsPanelTemplate>
    4. <VirtualizingStackPanel />
    5. </ItemsPanelTemplate>
    6. </ComboBox.ItemsPanel>
    7. </ComboBox>


    Damit wird die ComboBox nun sehr schnell angezeigt.
    Ihr werden vielleicht sagen, "das habe ich doch gesagt", das ist ja gerade die Schwierigkeit bei der WPF, die kann sehr viel, wenn man weiß wie's geht.

    Kann ich hier mal weiter fragen.
    Ich bekomme das mit dem AutoComplete nicht hin.
    Wie gesagt, ich komme von Access her und brauche einfach eine Hand voll Controlls, die das selbe machen, "wie ich es schon immer gewohnt bin" ;)

    Und gewöhnt habe ich mich daran, dass ich ein paar Buchstaben schreibe und der Cursor (das SelectedItem) automatisch zu dem Wert in der Liste springt,
    IsSearchable = True und wie weiter? Ich suche mal wieder in 100ten Internetseiten.

    Ihr habt völlig recht, unter 7000 Datensätzen mit der Maus hoch und runt zu scrollen, das wäre eine Zumutung, aber in einer Datenbank "Mü" zu schreiben und sofort den ersten "Müller" gezeigt zu bekommen, bzw. in der ComboBox-Liste ausgewählt zu sehen, keine Ahnung, warum ihr mir da so große "Designfehler" vorwerft.
    Echte Suchdialoge, in denen ich mit Regulären Ausdrücken und zig Optionen die kompliziertesten Suchanfragen stellen kann, sowas ist für Profis toll, der "Otto-Normalverbraucher" ist davon in der Regel überfordert.

    Bis bald und danke für alles Mitdenken!

    Johannes schrieb:

    Damit wird die ComboBox nun sehr schnell angezeigt.

    Sehr gut.

    Johannes schrieb:

    Ihr werden vielleicht sagen, "das habe ich doch gesagt", das ist ja gerade die Schwierigkeit bei der WPF

    Ne, würde ich nicht sagen. Schau, du erzwingst damit die Virutalisierung. Warum ich dir diesen Codeschnipsel nicht gleich gegeben habe hat aber einen Grund. Es muss nicht sein das diese "erzwingung" funktioniert.
    Ja nachdem welches ItemTemplate zu verwendest kann es sein das die Virtualisierung einfach nicht greift, und das woll teich ausschliessen. Nun gut.

    Johannes schrieb:

    keine Ahnung, warum ihr mir da so große "Designfehler" vorwerft.

    Sorry, ich glaube da hast du mich/uns falsch verstanden. Der Teufel liegt im Detail.

    Was ich im Grund meinte:
    Statt
    "Mü" zu schreiben und sofort den ersten "Müller" gezeigt zu bekommen

    wollte ich auf folgendes hinaus:
    "Mü" zu schreiben und die Datensätze welche mit Müller beginnen abrufen.

    Ich wollte nur darauf hinaus das es keinen Sinn macht 7000 Datensätze zu laden und in eine Combobox zu packen wenn die keiner durchgehen würde.
    Es macht aber sinn Datensätze zu laden die der User braucht. Und wenn der User "Mü" eingibt, und ich lade alle Namen die mit "Mü" beginnen macht das weit mehr sinn. Oder von mir aus alle Namen die "mü" enthalten.
    Denn es ist ja klar das niemand einen Eintrag direkt über die Combobox sucht. Wenn ich Sascha haben will gebe ich "Sa" ein und gut ist. Geht für den User auch schneller, bin ich bei dir. Aber warum dann überhaupt die 7000 laden.
    Mach das mal nicht im lokalen Netzwerk sondern über WAN und einer API, da wartest du dir nen Ast ab.
    Ich hoffe nun wurde es klarer. Es ist und bleibt deine Sache.

    Wegen deinem Problem mit Combobox und Autovervollständigung ist es wohl besser ich machen dir ein Beispiel aber ich weis leider nicht wann ich dazu komme. Ich bin gerade recht eingespannt.
    Evtl. kannst du die Zeit ja nutzen und mir eine Skizee oder ein bis zwei Screenshots machen wie du es haben willst. Dann kommen wir sicher schneller an DEIN Ziel.

    Grüße
    Sascha

    PS: Nicht immer ist alles Gold was glänzt. :whistling:
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo Sascha,

    zunächst mal vielen Dank, dass du dir überhaupt soviel Zeit für mich und mein Problem genommen hast!
    Natürlich geht deine eigene Arbeit vor.

    Meine Anwendung sah bisher so aus:

    Hinter vielen Datenfeldern zeigt eine Lupe, dass von hier aus gesucht werden kann.

    Und so kann der Anwender Adressen nach Vorname, Name, Wohnort oder Institution suchen.

    Dazu muss nur die Texteingabe mit der Auswahlliste synchronisiert werden, also während des Schreibens springt der Cursor in der Auswahlliste entsprechend nach unten.

    Ich werde mal weiter probieren, vielleicht finde ich die Lösung.
    Ich hatte gehofft, sowas sei bereits Bestandteil der ComboBox und ich müsste das nicht nachträglich mit KeyEvents erst programmieren.

    Liebe Grüße
    Johannes


    PS: Internetdatenbanken mit mehreren hunderttausenden Datensätzen, das ist eine ganz andere Hausnummer. Ich habe eher den kleinen Verein im Blick, der mit ein paar hundert oder wenigen Tausend Datensätzen zu tun hat.
    Hallo Johannes

    Also ich habe das nun probiert.
    Ich bin gerade verwundert. Habe ich das Problem nicht verstanden?

    Ich habe das nun mit Boardmitteln erstellt.

    Man hat Comboboxen, in diesen Comboboxen werden Daten angezeigt. Tippe ich in die Combobox etwas ein wird vervollständigt.
    Ich kann dann mit den Pfeiltasten auch die Einträge durchnavigieren. Der einfachheit halber habe ich nun nur eine Datengrundlage für alle Comboboxen genommen und da nach Nachname sortiert wurde funzt es beim Nachnamen am besten. Ich habe auch (einfach zum testen) eingebaut das wenn ein Eintrag ausgewählt wird das dann alle anderen Felder automatisch mit diesem Eintrag befüllt werden.

    Ich weis, das brauchst du nicht, du hast ja dann immer andere Daten für jede Combobox, das Prinzip bleibt aber gleich wie es ist.

    Das geht so alles mit Boardmitteln. Man kann natürlich noch easy mit nur einer Zeile einbauen das die Combobox z.b. automatisch aufklappt wenn man Tipps, das ist kein Problem.

    Grüße
    Sascha
    Dateien
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @Nofear23m
    Ich habe mir das Beispiel mal angesehen und mich gewundert das dort nur Tabpages sind. Ich dachte es geht um Comboboxen.
    Evtl das falsche Projekt hochgeladen? Oder bin ich neben der Spur?

    Edit: Mein Fehler....nach dem entpacken eine Zeile verrutscht und dann wurde das falsche Projekt geöffnet....Tut mir leid für den Post.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Hallo Sascha, und allen die das hier mit Interesse gelesen haben.

    Ein kleiner Hinweis wo mein Fehler gelegen hat bzw. haben könnte.

    Ich habe in meinem ComboBox-Test mit einem DataTemplate gearbeitet und diesem fehlt (noch) die Intelligenz zum suchen (weil ich es nicht implementiert habe).
    Mit DisplayMemberPath funktioniert es ohne zusätzlichen Programmcode, da hat die ComboBox von Hause aus die nötige Intelligenz.

    Ich habe den folgenden xaml auf das wesentliche verkürzt.

    XML-Quellcode

    1. so wird nicht automatisch zum Item gesprungen:
    2. <ComboBox x:Name="comboBox" ItemsSource="{Binding CBList}" IsEditable="True" >
    3. <ComboBox.ItemTemplate>
    4. <DataTemplate>
    5. <TextBlock Text="{Binding Name}" />
    6. </DataTemplate>
    7. </ComboBox.ItemTemplate>
    8. </ComboBox>
    9. so geht es:
    10. <ComboBox x:Name="comboBox" ItemsSource="{Binding CBList}" IsEditable="True" DisplayMemberPath="Name" />


    CBList ist vom Typ ObservableCollection(Of CBElement) / oder List(Of CBElement)
    und CBElement eine Klasse mit zwei Propertys (Key as String, Name as String)

    Wenn ich mit meiner Vermutung richtig liege, dann muss ich bei eigenen DataTemplates die Funktionalität zum Suchen etc. mit eigenen Triggern nachrüsten.
    Das wäre vermutlich bei deinem Fahrzeuge-Beispiel der Fall.

    Und nochmals vielen Dank!
    Ah, ok. Da liegt Hund begraben. Ich werde mir morgen mein Beispiel nochmal zu gemüte führen und das mal versuchen. Grüße
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Johannes schrieb:

    Wenn ich mit meiner Vermutung richtig liege, dann muss ich bei eigenen DataTemplates die Funktionalität zum Suchen etc. mit eigenen Triggern nachrüsten.
    Weiss net.
    Imo muss die Funktionalität zum Suchen ins Viewmodel, und da musste das DataTemplate dann halt dran binden.
    Für Trigger seh ich da noch kein Bedarf.
    Spontan würd ich sagen ObservableCollection(Of T) würde das "Triggern" die Meldung ans GUI schon abdecken. List(Of T) sicher nicht.