Diskuze: WPF refresh listboxu.

C# .NET .NET (C# a Visual Basic) WPF refresh listboxu. American English version English version

Aktivity (1)
Avatar
Libor Šimo (libcosenior):1.9.2015 19:17

Vždy po zadaní nového záznamu, alebo po úprave starého nechávam zoradiť kolekciu. Problém je v tom, že potrebujem, aby sa mi aj refrešol listbox, dôležité je však, aby sa refrešol aj s pridanými záznamami, pretože ak vyhľadávam, posúva mi to výsledky. Aby som videl zmenu v listboxe, musím vypnúť a zapnúť aplikáciu a to je neúnosné.
Používam ListBox.Items­.Refresh().
Predpokladám, že ste sa s podobným problémom už stretli a dúfam, že niekto poradí.

Odpovědět 1.9.2015 19:17
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Michael Škrášek:1.9.2015 19:51

já je vždycky všechny vymazal a znovu načetl ;)

Nahoru Odpovědět 1.9.2015 19:51
Proč to dělat složitě, když to jde jednoduše.
Avatar
Odpovídá na Michael Škrášek
Libor Šimo (libcosenior):1.9.2015 20:07

Vymazal si obsah listboxu? Ako? ListBox.Clear­Value()? Čo si dal do zátvorky? Nevedel som, čo tam dať.

Nahoru Odpovědět 1.9.2015 20:07
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):1.9.2015 20:12

Ešte som videl ListBox = null a potom znovu načítať, ale nefungovalo mi to.

Nahoru Odpovědět 1.9.2015 20:12
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Michael Škrášek:1.9.2015 20:29

Mysli takto, jestli ne tak se kouknu

ListBox.Items.Clear();
Nahoru Odpovědět 1.9.2015 20:29
Proč to dělat složitě, když to jde jednoduše.
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Libor Šimo (libcosenior)
patrik.valkovic:1.9.2015 20:39

Našel jsem tohle.
http://stackoverflow.com/…stbox-in-wpf

Musíš zavolat ListBox.Invali­dateArrange a potom ListBox.Update­Layout.

Nahoru Odpovědět 1.9.2015 20:39
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na patrik.valkovic
Libor Šimo (libcosenior):2.9.2015 5:34

Díky, po práci to vyskúšam.

Nahoru Odpovědět 2.9.2015 5:34
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Michal Štěpánek:2.9.2015 8:38

Ve WPF existuje ObservableCollec­tion, která umí reagovat na změny v datech.
http://www.itnetwork.cz/…gicka-vrstva

Nahoru Odpovědět 2.9.2015 8:38
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Libor Šimo (libcosenior):2.9.2015 8:47

To máš pravdu a používam to. Ale to funguje len na kontrolky ako sú napríklad label, textbox, textblock ...., na listbox to nefunguje.

Nahoru Odpovědět 2.9.2015 8:47
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Libor Šimo (libcosenior):2.9.2015 8:50

Teda to vlastne funguje keď napríklad pridám nový záznam, ale keď napríklad zoradím záznaky v kolekcii, nefunguje to a práve to je môj problém.

Nahoru Odpovědět 2.9.2015 8:50
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Michal Štěpánek
Libor Šimo (libcosenior):2.9.2015 9:08

Ak ťa zaujíma, ako to zatiaľ funguje, stiahni si to a otestuj: http://skolka-jazyka-c.freespace.sk/…oad/file.php?…

Nahoru Odpovědět 2.9.2015 9:08
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na patrik.valkovic
Libor Šimo (libcosenior):2.9.2015 15:38

Nebude to až také jednoduché, nefunguje to a zatiaľ to nebudem riešiť, mám pred sebou dokončenie logickej časti.
Neskôr pri vychytávkach sa na to pozriem dôkladnejšie.

Nahoru Odpovědět 2.9.2015 15:38
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Michal Štěpánek:2.9.2015 20:52

Pokud potřebuješ při změně znovu načíst data do listboxu, tak musíš vyprázdnit tu kolekci a znovu ji načíst. Pak se ti upraví i listbox. Takže si před naplněním kolekce dej

kolekce.Clear();

a pak ji znovu naplň...

Nahoru Odpovědět 2.9.2015 20:52
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Libor Šimo (libcosenior):3.9.2015 7:11

Díky, to ma nenapadlo, len dúfam, že to nebude mať veľký vplyv na rýchlosť aplikácie.
Po práci to vyskúšam.

Nahoru Odpovědět 3.9.2015 7:11
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Michal Štěpánek:3.9.2015 22:57

Nemyslím si, že to bude mít nějaký vliv na rychlost aplikace. Pokud používáš jako zdroj dat pro listbox kolekci dat, tak plnění, změny apod. musíš vždycky provádět na té kolekci a pak to načítat do listboxu, bo jinak tě to udělat nenechá...

Nahoru Odpovědět 3.9.2015 22:57
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Libor Šimo (libcosenior):4.9.2015 8:30

Písal som to preto, že po zmene (pridanie, úprava) sa kolekcia automaticky uloží do xml súboru. Podľa tvojej rady potom kolekciu vyprázdnim a znovu naplním s xml súboru a to si myslím, že môže trošku spomaliť program.

Nahoru Odpovědět 4.9.2015 8:30
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Michal Štěpánek
Libor Šimo (libcosenior):4.9.2015 8:31

Včera som nemal čas to otestovať, tak hádam dnes to vyjde.

Nahoru Odpovědět 4.9.2015 8:31
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Michal Štěpánek:4.9.2015 10:55

Tahám z xml souboru přes tisíc záznamů podle různých kritérií a žádné zpomalení nepozoruji...

Nahoru Odpovědět 4.9.2015 10:55
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Libor Šimo (libcosenior):10.9.2015 18:34

Vyskúšal som to, ale nefunguje.

skladnik.Uloz(skladnik.DhmZaznamy, "DhmData.xml");
skladnik.DhmZaznamy.Clear();
skladnik.DhmZaznamy = skladnik.Nacitaj<ObservableCollection<DhmZaznam>>("DhmData.xml");

ListBox sa vyprázdni, ale aj ostane prázdny. Ešte tam musí byť nejaká finta, aby to pracovalo.

Nahoru Odpovědět 10.9.2015 18:34
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Libor Šimo (libcosenior):10.9.2015 18:50

Božinku, ono stačí refrešnúť listbox.

DhmOsobaListBox.Items.Refresh();

Takže žiadne mazanie a znovu načítanie.

Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět 10.9.2015 18:50
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 20 zpráv z 20.