Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Neaktivní uživatel:28.9.2013 20:37

Zdravím, v aplikaci pro Windows Phone 8 mám vlastní UserControl a v něm jednoduchý ListBox. Jenže nefunguje bindování dat.

<UserControl>
    <Grid x:Name="LayoutRoot">
        <ListBox ItemsSource="{Binding pole}" />
    </Grid>
</UserControl>

K tomu cs soubor:

public partial class MujControl : UserControl
    {
        public Array pole = new[] {"jedna", "dva", "tri"};
        public MujControl()
        {
            InitializeComponent();
            DataContext = this;
        }
    }

Tento control poté vyrenderuju a ulozim do obrazku, ve zkratce tak nějak:

public void uloz()
{
    MujControl mujControl = new MujControl();
    mujControl.Measure(new Size(42, 42));
    mujControl.Arrange(new Rect(0, 0, 42, 42));

    WriteableBitmap bmp = new WriteableBitmap(42, 42);
    bmp.Render(mujControl, null);
    bmp.Invalidate();

    UlozitDoSouboru(bmp);
}

Výsledný obrázek je ale prázdný.
Když použiju tento xaml soubor, tak to funguje.

<UserControl>
    <Grid x:Name="LayoutRoot">
        <TextBlock ItemsSource="{Binding pole[0]}" />
        <TextBlock ItemsSource="{Binding pole[1]}" />
        <TextBlock ItemsSource="{Binding pole[2]}" />
    </Grid>
</UserControl>

Pokud ale to samé použiju v normální stránce (phone:PhoneAp­plicationPage místo UserControl), tak to normálně vypíše pod sebe obsah toho pole.Vůbec to nechápu a mít takto několik textblocků místo jednoho listboxu mě štve :(

Editováno 28.9.2013 20:40
Odpovědět
28.9.2013 20:37
Neaktivní uživatelský účet
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Petr Nymsa:28.9.2013 20:52

Ahoj, nejsem si úplně jistý, ale mám dojem, že pole bindovat takto nepůjde. Zkus místo toho List nebo ještě lépe ObservableCollec­tion.

Dále několik typ k Bindingu

  1. Používej properties -> Get / SET
  2. Tříde kde potřebuješ Binding implementuj INotifyProper­tyChanged -> rozhraní obstará automatickou obnovu vykreslení při změně dat na pozadí

Ani nevím že by u TextBlock byl ItemSource, zde se binduje přímo Text .. snad jsem pomohl :)

Nahoru Odpovědět
28.9.2013 20:52
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Paradise
Tvůrce
Avatar
Paradise:28.9.2013 20:57

A zkoušels to ItemsSource nastavit v kódu?

 
Nahoru Odpovědět
28.9.2013 20:57
Avatar
Neaktivní uživatel:28.9.2013 20:59

No tak ke všemu co si řekl snad jen to, že to tak mám. Jen tady jsem to pro jednoduchost nedal. A u toho TextBlocku máš pravdu, chyba při kopírování :)

Mě jen zaráží, proč to na normální stránce jde a ve vlastním controlu to nejde. :(

Nahoru Odpovědět
28.9.2013 20:59
Neaktivní uživatelský účet
Avatar
Odpovídá na Paradise
Neaktivní uživatel:28.9.2013 21:03

Nejde.. Tam bude nějaký chyták, ale nevím jaký. Je to moje první aplikace pro wp..

Nahoru Odpovědět
28.9.2013 21:03
Neaktivní uživatelský účet
Avatar
Paradise
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Paradise:28.9.2013 21:22

Musíš tomu ListBoxu nastavit x:Name a pak s ním můžeš dělat v kódu. Mělo by to fungovat. Já vždy binduju vlastní třídy, používám Data Template a zatím vše fungovalo.

 
Nahoru Odpovědět
28.9.2013 21:22
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Paradise
Petr Nymsa:28.9.2013 21:23

Binding funguje zcela v pořádku i bez x:Name a vůbec nijak nepracuju s komponentami v kódu. Akorát nastavím DataContext a hotovo.

Nahoru Odpovědět
28.9.2013 21:23
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Neaktivní uživatel:28.9.2013 21:24

Zítra vám pošlu projekt, abyste viděli, že to opravdu nejde :D

Nahoru Odpovědět
28.9.2013 21:24
Neaktivní uživatelský účet
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Petr Nymsa:28.9.2013 21:25

Zítra ,pokud si vzpoenu na to mrknu ;)

Nahoru Odpovědět
28.9.2013 21:25
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Neaktivní uživatel:29.9.2013 13:07

Tak tady to je... MainPage i MujControl jsou uplne stejne (az na ten pivot) a stejně bude vysledny obrazek prazdny
http://sdrv.ms/1bSGNrN

Nahoru Odpovědět
29.9.2013 13:07
Neaktivní uživatelský účet
Avatar
Odpovídá na Petr Nymsa
Neaktivní uživatel:4.10.2013 16:58

Mohl by ses na to podívat?

Nahoru Odpovědět
4.10.2013 16:58
Neaktivní uživatelský účet
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 11 zpráv z 11.