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í.

Diskuze: Správné použití mvvm

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Petr Klekner
Člen
Avatar
Petr Klekner:9.3.2018 15:45

ahoj mám problém používam ve wpfku mvvm a mám jeden problém. Mám okno kde je tlačítko které otevře okno do kterého zadám nového studenta mam to nabindované a tyto studenti se mi poté vypisují do comboboxu. Problém samozřejmě je že jak otevřu to nové okno tk se mi vytvoři nový StudentViewModel a je to v pytli vůbec nevím co s tím. K přidání používám command. Strašně předem děkuji za jakoukoli radu.

 
Odpovědět
9.3.2018 15:45
Avatar
Honza Skřivánek:9.3.2018 18:42

Pokud to chápu správně, tak potřebuješ předat List (nebo v čem máš uložené ty studenty) jako parametr do konstruktoru StudentViewModelu, tak budeš mít referenci na stejný list, který používá zbytek aplikace, a můžeš s ním operovat. Každopádně ale přesně nevím, jak to máš řešené nebo jestli používáš nějaký framework. Navíc v MVVM může být vytváření nových oken vcelku problematické, pokud nechceš jít proti samotnému patternu.

 
Nahoru Odpovědět
9.3.2018 18:42
Avatar
Petr Klekner
Člen
Avatar
Odpovídá na Honza Skřivánek
Petr Klekner:9.3.2018 18:58

Díky za odpověď. Nene ve StudentViewModelu mam ten list a při prvním vytvoření - to znamená při vytvoření základního okna se mi do něj načtou data z databáze používám Entity Framework.Tedka mi vyskočí nějaký nový okno které si ovšem vytvoří nový StudentViewModel a to je ten problém.... Já bych celkem chtěl aby mi program vytvářel nová okna. Jak jinak to udělat ? aby to bylo všechno v jedno oknu ?

 
Nahoru Odpovědět
9.3.2018 18:58
Avatar
Honza Skřivánek:9.3.2018 21:24

A to nové okno vytváříš jak?

 
Nahoru Odpovědět
9.3.2018 21:24
Avatar
Marian Benčat:9.3.2018 23:08

MVVM ve wpfku, jsem nepochopil, nebo spise nenacházel best practice ani po 4 letech používání.. K pochopení MVVM ve WPF a nalezení BP mi pomohl az angular 2:)

Nahoru Odpovědět
9.3.2018 23:08
Totalitní admini..
Avatar
Petr Klekner
Člen
Avatar
Odpovídá na Honza Skřivánek
Petr Klekner:10.3.2018 8:03

Nove okno vytvarim tak ze mam vytvorene xaml a code a pak si z tohodle okna vytvorim objekt

 
Nahoru Odpovědět
10.3.2018 8:03
Avatar
Petr Klekner
Člen
Avatar
Odpovídá na Marian Benčat
Petr Klekner:10.3.2018 8:03

Me se prave mvvm strasne zalibilo :) Angular 2 o co de ?

 
Nahoru Odpovědět
10.3.2018 8:03
Avatar
Honza Skřivánek:10.3.2018 12:36

Pokud to nové okno vytváříš prostřednictvím původního view modelu, tak je to porušení MVVM patternu. U některých jednodušších aplikací to nemusí vadit (a umožní ti to předávat reference v konstruktoru), na druhou stranu při zesložiťování aplikace ti začnou vznikat čím dál tím horší situace. Pokud chceš tvořit nová okna, doporučoval bych použít nějaký MVVM framework, který to jednoduše umožňuje, nebo nastudovat koncepty jako je Inversion of Control (IoC) a Dependency Injection (DI).

 
Nahoru Odpovědět
10.3.2018 12:36
Avatar
Odpovídá na Honza Skřivánek
Marian Benčat:10.3.2018 13:14

Většina mvvm WPF toolkitu bohužel jede na service locatoru, což je obrovská ostuda.

Nahoru Odpovědět
10.3.2018 13:14
Totalitní admini..
Avatar
d4rkw34v3r
Tvůrce
Avatar
Odpovídá na Petr Klekner
d4rkw34v3r:10.3.2018 15:03

Třeba v Caliburn.Micro je to řešený tak, že existuje třída WindowsManager implementující rozhraní IWindowsManager, která obsahuje metody pro vytváření oken (i dialogových). Konkrétní metodě se předá instance ViewModelu (jako další parametr lze předat i objekt s různým nastavením). WindowsManager pak podle názvu předaného ViewModelu najde odpovídající View) a zobrazí okno. Ten konkrétní ViewModel můžeš vytvořit on the fly, nebo si předat třeba továrnu přes konstruktor.

Framework obsahuje i velice jednoduchej DI container, takže se s tím ve výsledku pracuje celkem pěkně.

Tohle řešení mi přijde celkem fajn. Když pak budeš chtít testovat ten viewmodel, tak jenom dosadíš svou třídu, která ti nebude zobrazovat okna.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
10.3.2018 15:03
Avatar
Petr Klekner
Člen
Avatar
Odpovídá na d4rkw34v3r
Petr Klekner:10.3.2018 16:02

Super díky moc pomohlo :)

 
Nahoru Odpovědět
10.3.2018 16:02
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.