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.

Člen

Zobrazeno 11 zpráv z 11.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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.
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 ?
A to nové okno vytváříš jak?
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:)
Nove okno vytvarim tak ze mam vytvorene xaml a code a pak si z tohodle okna vytvorim objekt
Me se prave mvvm strasne zalibilo Angular 2 o co de ?
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).
Většina mvvm WPF toolkitu bohužel jede na service locatoru, což je obrovská ostuda.
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.
Zobrazeno 11 zpráv z 11.