Problém s DataBindingem

Vše okolo vývoje aplikací pro platformy Windows Phone a Windows 10 Mobile
Post Reply
Petrroll
přispěvatel
přispěvatel
Posts: 92
Joined: Sat Mar 06, 2010 15:24
Zařízení: Samsung galaxy S

Problém s DataBindingem

Post by Petrroll »

Zdravím, po delší době jsem se dostal shodou náhod k programování a mám drobnej problém s DataBindingem. Snažím se jet podle MVVM, takže mám klasicky model, ViewModel a data láduju DataBindingem.

Kód stránky, přiřadím DataContext

Code: Select all

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            string s_id = null;
            NavigationContext.QueryString.TryGetValue("id", out s_id);
            var viewMod = new T1ViewModel();
            DataContext = viewMod;
            viewMod.ID = int.Parse(s_id);
        }
ViewModel:

Code: Select all

    class TeacherViewModel : ViewModelBase
    {
        private T1 T1 { get; set; }
        public int ID { set { Teacher = App.ViewModel.T1[value]; RaisePropertyChanged("T1"); } }  //Do proměnný načtu podle IDčka danej objekt
    }
A samotnej XAML:

Code: Select all

StackPanel DataContext="{Binding T1}" ...>
            <TextBlock ... Text="{Binding NM}"  .../>
A (ne)překvapivě to nefunguje. V StackPanelu se totiž neaktualizuje DataContext a tudíž následně ani v TextBlocku. Vím, že někde určitě dělám naprosto fundamentální chybu, ale už jsem delší dobu neprogramoval a prostě jsem z toho vypad'.
Martin Suchan
smartmaniak
smartmaniak
Posts: 1138
Joined: Fri Mar 11, 2011 10:48
Zařízení: Nokia Lumia 925
Location: Praha

Problém s DataBindingem

Post by Martin Suchan »

Jestli to neni tim, ze ten Teacher je private?
Jinak ViewModel bys nemel vytvaret v OnNavigatedTo ale v samotnem MainViewModelu v metode, ktera resi navigaci na stranku s ucitelem, a na strance se na nej uz jen odkazovat na neco jako MainViewModel.CurrentTeacher. Tim by ses vyhnul pouziti QueryStringu, parsovani IDcka, vytvareni noveho viewmodelu v OnNavigatedTo (muze zabrat dost casu u velkych modelu a zablokujes tim UI thread).
Stejne tak mit vse staticky v App neni idealni, radeji pouzit DependencyInjection nebo ViewModelLocator.
Petrroll
přispěvatel
přispěvatel
Posts: 92
Joined: Sat Mar 06, 2010 15:24
Zařízení: Samsung galaxy S

Problém s DataBindingem

Post by Petrroll »

Privátní Teacher je jen pozůstatek testování, nefunguje to samozřejmě ani s veřejným.

Na ty změny se podívám, nicméně to jsou (vcelku) drobnosti, které by fungování neměli nikterak výrazně ovlivnit. Přeci jen i tak bych DataContext přiřazoval až v OnNavigatedTo, jen už předem vytvořený.
Igor Kulman
častý přispěvatel
častý přispěvatel
Posts: 228
Joined: Wed Mar 28, 2012 12:46
Zařízení: ano

Problém s DataBindingem

Post by Igor Kulman »

Podľa mňa je to tým, že tvoj setter pre Teacher nevolá RaisePropertyChanged. Takže ti priradíš stránke DataContext, v ktorom je Teacher null, potom priradíš id, ktoré priradí Teacher ale stránka sa o tom už nedozvie. Prípadne ešte môžeš prehodiť riadky s DataContext = viewMod; a viewMod.ID = int.Parse(s_id);
Petrroll
přispěvatel
přispěvatel
Posts: 92
Joined: Sat Mar 06, 2010 15:24
Zařízení: Samsung galaxy S

Problém s DataBindingem

Post by Petrroll »

Ale při přiřazení ID a tedy v podstatě i Teacher přeci RaisePropertyChanged volám, takže ViewModel o změně (nebo krátce po ní) vědět dá. Prohazovat jsem zkoušel všechno možné.

//Původně jsem to měl elegantněji:

Code: Select all

var viewMod = new TeacherViewModel() {ID = int.Parse(s_id)};
Igor Kulman
častý přispěvatel
častý přispěvatel
Posts: 228
Joined: Wed Mar 28, 2012 12:46
Zařízení: ano

Problém s DataBindingem

Post by Igor Kulman »

Uploadni niekde cely projekt... mi to vrta v hlave.
Petrroll
přispěvatel
přispěvatel
Posts: 92
Joined: Sat Mar 06, 2010 15:24
Zařízení: Samsung galaxy S

Problém s DataBindingem

Post by Petrroll »

Je to postavený na šabloně (sám bych ji nevybral, ale je to takovej 'úkol' pro známého*), proto taky takhle zmršeně zpracovanej ViewModel.

Konkrétně jde o page TeacherPage a příslušnej ViewModel.

*** (odkaz sundán na přání 'známého')

*) Potřebuje jako úkol udělat aplikaci a aby si to ulehčil, tak to chce mít na tejhle template. Já mu na tom jen měl ukázat jak to rozšířit + jak parsovat z HTML nějaký info.
Igor Kulman
častý přispěvatel
častý přispěvatel
Posts: 228
Joined: Wed Mar 28, 2012 12:46
Zařízení: ano

Problém s DataBindingem

Post by Igor Kulman »

Každý ViewModel musí byť public. Pridaj slovo public do TeacherViewModel a začne to fungovať. Inak pekný humus.
Petrroll
přispěvatel
přispěvatel
Posts: 92
Joined: Sat Mar 06, 2010 15:24
Zařízení: Samsung galaxy S

Problém s DataBindingem

Post by Petrroll »

Já sem blb, taková neuvěřitelně hloupá chyba.

//ohledně humusovosti, souhlasím, že je to docela maglajz, ale to je bohužel dílo autorů šablony.

PS: Díky moc!
Post Reply

Return to “Programování a vývoj”

Who is online

Users browsing this forum: No registered users and 1 guest