Avatar billede RudiHansen Nybegynder
27. juni 2015 - 11:29 Der er 8 kommentarer og
1 løsning

(XAML) Opdater form når data ændre sig løbende.

Som eksempel lad os tænke sig at jeg har et text felt på en form og en knap. Når jeg så trykker på knappen vil jeg have at feltet viser en tæller der tæller op fra 0 til 10.

Nogen der kan forklare mig hvordan man gør dette?

Mener selv jeg har styr på data binding, så har prøvet at data binde feltet til en variabel og så opdatere variablen, men så bliver opdateringen jo først vist når min kode er færdig og ikke i mens koden køre, så det er åbenbart ikke svaret.
Avatar billede Syska Mester
27. juni 2015 - 17:43 #1
Client Side vs Server Side.

Du skal tænke på hvad der renderes som html på serveren bliver først sendt tilbage til klienten når det er færdig og ja, så er det jo statisk indhold.

Du vil gerne have noget dynamisk og skal derfor kigge på javascript for at lave det.

Dette burde give nogen hits på google til at få dig i den rigtige retning eller må du sige til. https://www.google.dk/search?site=&source=hp&q=dynamic+counter+javascript&oq=dynamic+counter+java&gs_l=hp.3.0.0.102.2996.0.3573.21.18.0.3.3.0.133.1777.9j8.17.0....0...1c.1.64.hp..2.19.1693.0.q7A-O3LfWO4

mvh
Avatar billede RudiHansen Nybegynder
27. juni 2015 - 19:54 #2
Ok jeg har hvis ikke været tydelig nok i min beskrivelse, men det er en C# WPF Form jeg er ved at lave ikke en hjemmeside.
Avatar billede Syska Mester
28. juni 2015 - 00:36 #3
Jeg kunne bare læse hvad du skrev :-) Du skrev faktisk en win form.

Se dette spørgsmål på SO http://stackoverflow.com/questions/18005681/countdown-timer-in-a-strip-status-label-c-sharp

Det burde give muligheder for hvordan det kan laves.
Avatar billede RudiHansen Nybegynder
28. juni 2015 - 12:03 #4
Ja desværre er den løsning baseret på en timer, og det virker ikke rigtigt for mig.
Det er i sidste ende meningen dette skal bruges til at vise resultatet af en noget mere kompliceret udregning, hvor jeg bare gerne vil have vist nogen mellem resultater under vejs i beregningen.
Så der skal helst ikke være en pause i beregnings rutinen, med mindre det bare er et enkelt kald til noget der opdatere formen.
Avatar billede Syska Mester
28. juni 2015 - 12:33 #5
Du må jo vide hvornår der skal opdateres ...

Hvis det er på baggrund af en process der ændre state, så må du kunne smide et event fra din process, som du så kan lytte på i din UI ... så du kun ændre status når det er sket nye ting. Det ville nok også være den mest praktiske og effektive ... da du så er fri for at opdatere, hvis der ikke er sket noget.

Det lyder mere som det du ønsker efter den nye forklaring.
Avatar billede RudiHansen Nybegynder
28. juni 2015 - 13:15 #6
Ja ok det lyder fornuftigt nok, så kan du forklare hvordan jeg gør det?
Avatar billede tryltryl Juniormester
28. juni 2015 - 13:53 #7
Jeg tænker BackgroundWorker:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var worker = new BackgroundWorker();
    worker.WorkerReportsProgress = true;
    worker.DoWork += worker_DoWork;
    worker.ProgressChanged += worker_ProgressChanged;
    worker.RunWorkerCompleted += worker_RunWorkerCompleted;
    worker.RunWorkerAsync();
}

void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    // kaldes i UI-tråden, når DoWork er færdig
    textblock.Text = "Færdig";
}

void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    // kaldes i UI-tråden, når ReportProgress kaldes fra DoWork-tråden
    textblock.Text = e.ProgressPercentage.ToString();
}

void worker_DoWork(object sender, DoWorkEventArgs e)
{
    // arbejde, som udføres i en anden tråd
    int count = 0;
    while (true)
    {
        (sender as BackgroundWorker).ReportProgress(count);
        Thread.Sleep(1000);
        if (++count == 11) break;
    }
}
Avatar billede RudiHansen Nybegynder
28. juni 2015 - 14:19 #8
Ja det var lige præcis det jeg skulle bruge, men der er dog en lille detalje, det her virker i en WPF Application.
Men det virker som om BackgroundWorker ikke findes i Universal apps, så hvad bruger man der i stedet?
Avatar billede RudiHansen Nybegynder
28. juni 2015 - 17:21 #9
Ok jeg fandt løsningen selv, ved at bruge await/async så nu virker det mange tak for hjælpen.

tryltryl jeg kan ikke markere dit svar som "svaret" hvorfor ikke?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester