Avatar
Posix
Člen
Avatar
Posix: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
Proč to dělat jednoduše, když to jde složitě.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Posix
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
Redaktor
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
Posix
Člen
Avatar
Posix: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
Proč to dělat jednoduše, když to jde složitě.
Avatar
Posix
Člen
Avatar
Odpovídá na Paradise
Posix: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
Proč to dělat jednoduše, když to jde složitě.
Avatar
Paradise
Redaktor
Avatar
Odpovídá na Posix
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
Redaktor
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
Posix
Člen
Avatar
Posix: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
Proč to dělat jednoduše, když to jde složitě.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Posix
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
Posix
Člen
Avatar
Posix: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
Proč to dělat jednoduše, když to jde složitě.
Avatar
Posix
Člen
Avatar
Odpovídá na Petr Nymsa
Posix:4.10.2013 16:58

Mohl by ses na to podívat?

Nahoru Odpovědět 4.10.2013 16:58
Proč to dělat jednoduše, když to jde složitě.
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.