Op werk gebruiken we WPF al een tijdje. Met name een tool gebruiken we enorm vaak: he is in feite niets meer dan een enorm grote 2D 'paper' waarop mensen text, images etc kunnen plaatsen en af en toe links leggen. (het doet wel wat meer maar dat is NDA).
we hebben dus een Classe structuur met die data:
er zijn gemiddeld 30 stukjes text, 10 images, en een tiental notes per 'pagina'.
Het laden van de xml naar de dataclass (zonder databinding) is geklaard in een 100ms.
Maar zodra we de databinding met de visuele templates terug 'aanzetten' gaat het enorm traag (lees 5 , 10 seconden). + de UI ligt totaal plat. De visuele templates zijn echt niet zwaar: een paar lijntjes, text, en image objects. De images kunnen we groot zijn, maar ook als der geen zijn gaat het traag (dus geen loading of images probleem).
We willen dus graag dat de user ziet dat er iets gebeurt met het loaden van deze file. Helaas licht de UI thread volledig lam: i.e. Het lijkt alsof de Databound methode het ons onmogelijk maakt om iets te laden met een progressbar. Zelfs met sleeps! en backrgound workers tussen het bouwen van de Data class maakt niets uit. Je ziet niets totdat alles der is en totaal geen feedback.
En natuurlijk kun je in WPF geen render forceren (behalve gore hacks die echt niet altijd werken) dus we staan een beetje 'mat'.
Het enige wat we willen is dat de user een 'loading... 25%' te zien krijgt terwijl we data class opvullen (en de binding die dan de controls, image loading, voor ons doet). het lijkt me dat zoiets tamelijk vaak moet voorkomen (i.e. een photoviewer app enzo). Maar de databound class moet in UI thread wonen dus tja... what to do?
Iemand meer ervaring met hoe we het databound methode kunnen gebruiken voor het laden van een grote file + weergeven van status op de UI? (dat het lang duurt maakt ons niet uit: dat we de user echt niets feedback kunnen geven is disgracefull)
WPF is de toekomst van windows programming maar ze maken bepaalde zaken zo onduidelijke en inconsistent.
we hebben dus een Classe structuur met die data:
code:
1
2
3
4
5
6
7
8
9
10
| class Image(); class Question(); class Note(); class Data() { Image[]; //array of Question[]; //array of Note[]; //array of } |
er zijn gemiddeld 30 stukjes text, 10 images, en een tiental notes per 'pagina'.
Het laden van de xml naar de dataclass (zonder databinding) is geklaard in een 100ms.
Maar zodra we de databinding met de visuele templates terug 'aanzetten' gaat het enorm traag (lees 5 , 10 seconden). + de UI ligt totaal plat. De visuele templates zijn echt niet zwaar: een paar lijntjes, text, en image objects. De images kunnen we groot zijn, maar ook als der geen zijn gaat het traag (dus geen loading of images probleem).
We willen dus graag dat de user ziet dat er iets gebeurt met het loaden van deze file. Helaas licht de UI thread volledig lam: i.e. Het lijkt alsof de Databound methode het ons onmogelijk maakt om iets te laden met een progressbar. Zelfs met sleeps! en backrgound workers tussen het bouwen van de Data class maakt niets uit. Je ziet niets totdat alles der is en totaal geen feedback.
En natuurlijk kun je in WPF geen render forceren (behalve gore hacks die echt niet altijd werken) dus we staan een beetje 'mat'.
Het enige wat we willen is dat de user een 'loading... 25%' te zien krijgt terwijl we data class opvullen (en de binding die dan de controls, image loading, voor ons doet). het lijkt me dat zoiets tamelijk vaak moet voorkomen (i.e. een photoviewer app enzo). Maar de databound class moet in UI thread wonen dus tja... what to do?
Iemand meer ervaring met hoe we het databound methode kunnen gebruiken voor het laden van een grote file + weergeven van status op de UI? (dat het lang duurt maakt ons niet uit: dat we de user echt niets feedback kunnen geven is disgracefull)
WPF is de toekomst van windows programming maar ze maken bepaalde zaken zo onduidelijke en inconsistent.