Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
ComboBox.Text wird geleert bei ItemsSource zuweisung
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

ComboBox.Text wird geleert bei ItemsSource zuweisung

beantworten | zitieren | melden

Hallo,

ich habe eine ComboBox, der ich im KeyDown_Event einen neuen ItemSource zuweisen möchte. (Hintergrund: Ich möchte nur noch die Datenanzeigen, indenen "ComboBox.Text"-Inhalt enthalten möchte.


Mein Problem:

Ich tippe jetzt "M", dann öffnet sich im Debug der KeyDown-event, meine List wird zusammen gestellt mit allen Daten die ein "M" enthalten und dann als ItemsSource der Combobox zugewiesen.

Nach dem durchlauf der Routine ist aber der ComboBox.Text wieder leer und mein "M" folglich auch weg.

Wo liegt mein Fehler?
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.856
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,

zeig mal die wesentlichen Code-Teile. Sonst kann nur geraten werden. Bitte beachte auch [Hinweis] Wie poste ich richtig? Punkt 5


mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

beantworten | zitieren | melden


private List<SearchItem> SearchResult { get { return _service.GetSearchResult<SearchItem>(this.Text); } }

        private void ComboBoxEditKeyUp(object sender, KeyEventArgs e)
        {
            //Hier liegt noch der Fehler dass nach jedem Buchstaben der Inhalt entfernt wird
            ItemsSource = SearchResult;

            this.ItemsSource = SearchResult;
            if (!this.IsPopupOpen)
            {
                this.IsPopupOpen = true;
            }
            if (SearchResult.Count == 1)
            {
                this.SelectedItem = SearchResult[0];
                this.IsPopupOpen = false;

                this.IsEnabled = false;
            }
        }

Gruss
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von reloop am .
private Nachricht | Beiträge des Benutzers
zero_x
myCSharp.de - Member

Avatar #avatar-2567.gif


Dabei seit:
Beiträge: 1.044
Herkunft: Koblenz

beantworten | zitieren | melden

Hallo reloop,

verwende stattdessen lieber eine CollectionViewSource.

zero_x
zero_x | myCSharp.de - gemeinsam mehr erreichen

Für längere Zeit inaktiv.
private Nachricht | Beiträge des Benutzers
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

beantworten | zitieren | melden

Danke für den Hinweis, aber selbst bei einer ObservableCollection wird der this.Text nach jedem KeyPress geleert.
private Nachricht | Beiträge des Benutzers
zero_x
myCSharp.de - Member

Avatar #avatar-2567.gif


Dabei seit:
Beiträge: 1.044
Herkunft: Koblenz

beantworten | zitieren | melden

Hallo reloop,

hat sich damit dein Problem gelöst? Wenn ja, kannst du bitte beschreiben, wo der Fehler lag? Für die anderen wäre es sicherlich interessant zu wissen, wie du dein Problem gelöst hast.

zero_x
zero_x | myCSharp.de - gemeinsam mehr erreichen

Für längere Zeit inaktiv.
private Nachricht | Beiträge des Benutzers
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

beantworten | zitieren | melden

Hey,

da hast du mich leider falsch verstanden.

Mein Problem, und zwar, dass nach jedem Zuweisen des ItemsSource, mein bereits getippter Text immer verschwindet.

Wenn ich ein X in die ComboBox Tippe, wird mein Event aufgerufen, der ItemsSource mit allen Texten die ein "X" enthalten gefüllt und danach ist mein ComboBox.Text aufeinmal wieder leer.
private Nachricht | Beiträge des Benutzers
zero_x
myCSharp.de - Member

Avatar #avatar-2567.gif


Dabei seit:
Beiträge: 1.044
Herkunft: Koblenz

beantworten | zitieren | melden

Hallo reloop,

ich würde vermuten, dass es an der ObservableCollection<T> liegt. Versuch mal nicht direkt auf die ItemsSource zuzugreifen, sondern direkt die Daten in der ObservableCollection<T> zu ändern. Dann sollte es eigentlich funktionieren. Noch besser ist es, wenn du dazu ein attached Property programmiert. Mit diesen attached Property kannst du noch einfacher die Daten sortieren. Hier habe ich sogar ein nettes Beispiel gefunden, wie man sowas programmieren kann. Aber wie schon gesagt - verwende lieber die CollectionViewSource.
zero_x | myCSharp.de - gemeinsam mehr erreichen

Für längere Zeit inaktiv.
private Nachricht | Beiträge des Benutzers
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

beantworten | zitieren | melden

'Hey zero_x,

ich habe nun folgendes eingebaut:


private ICollectionView View
        {
            get
            {
                return CollectionViewSource.GetDefaultView(SearchResult);
            }
        }

Damit wurde schon mal mein Problem behoben, dass der Text immer gelöscht wurde.

Nun habe ich nur noch ein Problem. Im KeyDown steht folgender Code:

            SearchResult = _service.GetSearchResult<SearchItem>(searchString);
            View.Refresh();

Die List SearchResult wird auch mit den gewünschten Daten gefüllt, jedoch steht beim öffnen der Combobox immer noch der Inhalt von vorher drin.

Sprich, er aktualisiert irgendwie den Inhalt nicht, obwohl SearchResult die richtigen Daten besitzt.

Danke schonmal für deine Hilfe(!)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von reloop am .
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

Hallo,

du solltest nicht immer deine Ursprungsaufzählung neu setzten. Erstell einmal deine Collection mit allen Items, hol dir die View. Gegen die bindest du deine ComboBox. Und wenn du jetzt nach Eingabe der ComboBox filtern willst, dann tu das durch die CollectionView. Die besitzt das entsprechende Filter Delegate. Der Filter sollte das machen was du bisher in der GetSearchResult Methode hast.
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

beantworten | zitieren | melden

Hallo Talla,

danke für deinen Rat, ich habe es jetzt so umgesetzt.

Eine Frage habe ich noch:

Wie rufe ich am besten die Filtermethode auf? Setze ich im KeyDown einfach immer wieder den Filter aufruf neu?

Sprich:

View.Filter = new Predicate<object>(FilterMethode);

Danke,
ihr seid echt eine spitzen Hilfe!
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

Hallo,

ja entweder so, gefolgt von nem Refresh der View. Oder ne andere Möglichkeit wäre, du übergibst ne anonyme Methode in Form eines Lambda Ausdrucks oder Delegates mit einer capured Variable (in deinem Fall nen String auf dem gefiltert wird) und machst dann den Refresh. Nimmt sich beides nichts.
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

beantworten | zitieren | melden

Mir ist es ja schon fast unangenehm, aber wenn ich jetzt im KeyDown

View.refresh()

reinschreibe, leert er wieder, wie bereits am Anfang, mein Text. (Obwohl der Filter funktioniert!)

Bedeutet:

Ich tippe "X" und bekomme alle die mit "X" beginnen. Jedoch ist danach das Textfeld wieder leer. :-(
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

Hallo,

schau einfach mal hier. Da wird genau sowas gemacht mit dem vorgeschlagenen Vorgehensweise.
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers