Diskuze: WPF DataBinding - Update textBlocku ze stringu

C# .NET .NET (C# a Visual Basic) WPF DataBinding - Update textBlocku ze stringu American English version English version

Avatar
hypnozc
Člen
Avatar
hypnozc:

Zdravím. Mám cyklus while, ve kterém probíhají výpočty a tyto data potřebuji sázet do textBlocku. Mě to zatím funguje jen tak, že až skončí tento cyklus(proběhne určitý počet výpočtů {vždy jiný počet!}), tak se čísla vypíší naráz do textBlocku. Ale chtěl bych, aby hned jak program výpočet spočítá, tak aby se toto číslo objevilo v textBlocku. Myslím, že se to dá udělat přes DataBinging, ale vůbec nevím jak na to...

Příklad cyklu:

while (true)
            {
                if (player1.Nazivu() && player2.Nazivu())
                    Attack();
                else
                {
                    Dead();
                    break;
                }
            }

 private void Attack()
        {
                Damage2.Text += new2.uder.ToString() + "\n";
        }

Budu vděčný za každou radu a předem děkuji za odpovědi.
P.S.: Na Googlu jsem již hledal, ale z těch tutoriálů jsem to nepochopil. a Damage2 je ten textBlock.

Editováno 7.11.2013 17:49
Odpovědět 7.11.2013 17:48
Schopný programátor si štěrbinu vždy najde...
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na hypnozc
Theodor Johnson:

Mě vždycky fungovalo zavolat tuhle metodu

public static void DoEvents()
{
    Application.Current.Dispatcher.Invoke(DispatcherPriority.Background,
                                          new Action(delegate { }));
}

po přidání textu
(Je to ekvivalent k Application.Do­Events() ve WF)

Nahoru Odpovědět 7.11.2013 18:01
Přecházím na "Cross-Platform Development"
Avatar
Odpovídá na hypnozc
Jakub Lásko[Saarix]:

Snad to nebude vypadat jako blbý dotaz, ale přece když použiješ

tbxText.Text += text;

Tak se ti ten text v komponentě objeví hned... nebo se pletu?

Nahoru Odpovědět 7.11.2013 18:33
Časem je vše možné.
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Jakub Lásko[Saarix]
Theodor Johnson:

Pleteš, pokud jedeš v cyklu, tak to čeká do projetí eventu aplikace a updatu elementů. To že se ti to objeví hned je tím že to vlákno nemáš vytížený a tudíž nemusí čekat na update.

Nahoru Odpovědět 7.11.2013 18:48
Přecházím na "Cross-Platform Development"
Avatar
hypnozc
Člen
Avatar
Odpovídá na Theodor Johnson
hypnozc:

Díky. Máš naprostou pravdu. Mohl by jsi mi ještě vysvětlit, jak to celé funguje? Chtěl jsem ti dát i++, ale zatím nemohu...

Nahoru Odpovědět 7.11.2013 20:45
Schopný programátor si štěrbinu vždy najde...
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na hypnozc
Theodor Johnson:

Tím že vlastně použiješ cyklus tak celé hlavní vlákno provádí tu operaci co je v cyklu a nemůže se dostat k tomu aby přidalo ten text to TextBlocku. Dá se to ošetřit třeba využitím vláken, nebo BackgroundWorker. Ta metoda co jsem ti napsal funguje tak že ve vlákně v pozadí provede prázdný příkaz a aplikace se obnoví (updatuje). Tudíž neblokuje hlavní vlákno. Ale i přesto to moc nedopoporučuju, jsou tu i některé elementy které nemají schopnost se takto obnovit na příkaz, ale postačí ti než se naučíš pracovat s vlákny.

Nahoru Odpovědět 7.11.2013 20:58
Přecházím na "Cross-Platform Development"
Avatar
hypnozc
Člen
Avatar
Odpovídá na Theodor Johnson
hypnozc:

Děkuji. Teď už to chápu.

Nahoru Odpovědět 7.11.2013 21:03
Schopný programátor si štěrbinu vždy najde...
Avatar
Odpovídá na Theodor Johnson
Jakub Lásko[Saarix]:

Aha :-) eště jsem na toto nenarazil, tak díky moc za osvětlení.

Nahoru Odpovědět 8.11.2013 9:11
Časem je vše možné.
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 8 zpráv z 8.