Diskuze: Binding v UserControlu

C# .NET .NET (C# a Visual Basic) Binding v UserControlu American English version English version

Avatar
Posix
Člen
Avatar
Posix:

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:

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:

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

 
Nahoru Odpovědět 28.9.2013 20:57
Avatar
Posix
Člen
Avatar
Posix:

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:

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:

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:

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:

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:

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:

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:

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.