WPF, MVVM a dialogové okno

Hanz

WPF, MVVM a dialogové okno
« kdy: 28. 02. 2015, 21:59:22 »
Dobrý den, chtěl bych se Vás zeptat.

Mám hlavní logiku hry svázanou s hlavním oknem, tam vím o současném score i high score.

Chtěl jsem do hry přidat dialog, ve kterém hráč vyplní svůj nick při překročení nejvyššího score. Dialog můžu udělat jako klasické wpf okno a pak si vyčtu nick, nebo ho udělat celé podle mvvm a pak bych v rámci modulu dialogu ukládal i nick a high score.

Protože jsem v tomto stále nováček, rád bych se Vás zeptal, jak byste toto řešili Vy?

Je nutné implementovat MVVM všude v projektu, i když by to třeba šlo i jednodušeji?

Díky
H.
« Poslední změna: 01. 03. 2015, 14:08:55 od Petr Krčmář »


Hanz

Prostě se mi nezdá, že bych to dělal špatně - dialog je jen dialog a vrátí OK a hodnotu nebo Cancel - a hlavní aplikační vrstva už to nějak zpracuje, nebo ne?

Tomáš Roll

Jaká je tvoje motivace? Chceš a. díky MVVM napsat hru, nebo b. se chceš na hře naučit MVVM?
Pokud a. tak to prostě splácej.
Pokud b. tak bys měl použít nějaký framework, hotový nebo vlastní.

Hanz

Re:WPF, MVVM a dialogové okno
« Odpověď #3 kdy: 01. 03. 2015, 21:15:56 »
V podstatě jsem udělal jednoduchou hru, kterou už mám.

Chtěl jsem to ale dotáhnout po stránce best practices, než abych někde zveřenil splácaný kód - třeba na githubu. Takže a). V tomto směru jsem se tázal, zda-li přenecháváte aplikační část dialogu, který by znal nick, highscore, zbindoval to do modelu, nebo zda-li používáte dialog jen pro vyčtení dat(nicku). Druhávarianta mi připadla čistější.

Ad b). Frameworků na google lze najít několik, ale nerad bych se spolehnul na něco, co mě odstíní od wpf a pak na bojišti budu muset řešit nějaký úkol, kde budu potřebovat znát vnitřnosti. Je opravdu dobrý nápad chmatnout hned po nějakém frameworku, třeba Caliburn?

Díky
H.

Tomáš Roll

Re:WPF, MVVM a dialogové okno
« Odpověď #4 kdy: 01. 03. 2015, 22:18:53 »
Si udělej vlastní framework, je to pár řádku. Prostě musíš spárovat Views a ViewModels, třeba podle atributu, nebo jmenné konvence. Uděláš si třeba nějakého předka tvého MainViewModel, tam při bootstrapu projdeš assembly a spáruješ třídy. Nebo to budeš dohledávat za běhu, zas takové zdržení to není. Když budeš chtít vytvořit okno se skóre, vytvoříš si v hlavním ViewModelu nějaký ScoreViewModel a zavoláš třeba v MainViewModelu ShowViewModel(scoreViewMode). MainViewModel si k scoreViewModelu najde View, vytvoří jeho instanci, vytvoří okno, do Contentu okna vrazí View a do DataContextu View vrazí ViewModel.

To je jedna z mnoha variant. Best Practices jsou jasná, nedělej View, okno, cokoliv viditelného bez ViewModelu, nešahej z ViewModelu (a proboha z Modelu už vůbec ne) na cokoliv vizuálního. No a z těchto důvodů musíš mít nějakou infrastrukturu, abys mohl z ViewModelu otevřít okno.


Tomáš Roll

Re:WPF, MVVM a dialogové okno
« Odpověď #5 kdy: 01. 03. 2015, 22:29:38 »
Jo a ještě chuťovka, samozřejmě že všechna okna nebo panely bys měla zavírat přes jejich ViewModely, třeba commandem CmdClose. A když někdo zavře okno ťuknutím na křížek, tak ošetřit.
MVVM program se dvěma okny je extrem, na program s jedním oknem použiješ ViewModel, na více oken framework. Na dvě okna to je  docela mrhání prací a časem.