[C#] MVVM použití více VM v jednom View

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Prochycz 15. 2. 2017 10:43

Dobré ráno,
poprvé jsem se vrhl na programování složitější aplikace, tzn. spousta komponent apod, proto bych to chtěl podchytit natolik, aby nebyl můj návrh aplikace až tak úplně špatný. Aplikace bude mít jedno okno, který je rozděleno na dvě části. Pravá část aplikace slouží především k zobrazení nějakých dat, tato část zůstává prakticky neměnná. Levá část se naopak bude měnit častěji, ať už se jedná například o nastavování různých parametrů, zadávání vstupních hodnot apod. Proto jsem si říkal, že bych udělal jeden "LeftWindowViewModel" a poté další VM jako například "SettingsViewModel" atd, které by byly svázaný s pravou částí okna.
Něco jako jsem nakreslil na následujícím obrázku:
Obrázek

Je to vhodné takto řešit nebo to není zrovna ideální způsob řešení? (Je to samozřejmě jen nástřel, jak si představuji, že bych to měl udělaný) Napadlo mě ještě, že bych využil dědičnosti a jednotlivé VM dědil, ale to jsem se dočetl na stackoverwflow, že to asi není zrovna úplně ideální nápad.

Děkuji za případné návrhy a rady
Prochycz
Junior

Odeslat příspěvekod Jamaic 15. 2. 2017 12:37

Já osobně bych něco takového řešil tím, že bych na editaci parametrů měl nové vyskakovací okno.
Tedy v hlavním okně bych vypsal všechny data i s parametry + navíc tlačítko "editovat" pro daný parametr/sekci dat.
To tlačítko by vytvořilo vyskakovací okno pro zadání/úpravu hodnoty (nebo tabulky nějaké té sekce dat).

Možná by bylo dobré konkrétně rozvést tvůj problém, klidně i s nějakým příkladem.
Jamaic
Kolemjdoucí

Odeslat příspěvekod Prochycz 15. 2. 2017 13:56

To bohužel právě není možný, aplikace má pevně daný vzhled, který není možné změnit. Bude se jednat o embedded aplikaci, kde aplikace musí vypadat podle nějakého standardu. Když uvedu nějaký příklad, tak v levé části bude například zobrazován graf, který bude zobrazovat data přijaté po sběrnici. A pravá část bude obsahovat ovládací část zařízení, která bude komunikovat po sběrnici ven.
Prochycz
Junior

Odeslat příspěvekod anonymni 15. 2. 2017 14:02

Ano, tohle je správné řešení, mít pro každou část aplikace separátní ViewModel/View. Akorát si to pak trochu lépe pojmenuj, než LeftWindowViewModel/View.

Dědičnost by se dala využít, pokud by ViewModely byly hodně podobné, ale to u tebe, z toho, cos napsal, nejsou.
anonymni

Odeslat příspěvekod powlcz 16. 2. 2017 08:15

Pro mne jako takový, je špatný celý koncept MVVM. Musíš roztříšit kód do několika vrstev na různá místa, pak budeš donucen používat různé templates, datové kontrakty, lambda výrazy. Samotné pochopení a rozkoukání zabere dost času. Ze začátku je to opravdu složitější na pochopení a správnou implementaci, aby se dalo těžit z výhod MVVM. Ale když to musí být...

Pro takhle jednoduchou aplikaci jak jsi jí popsal (i když pro tebe to je třeba velký projekt) to podle mne nemá smysl. Aplikace zobrazující dva, tři formuláře, z toho jeden bude okno "O aplikaci"?
Chronický Ujížděč na nevhodnostech
powlcz
Junior

Odeslat příspěvekod Prochycz 16. 2. 2017 08:43

Díky za odpověď
Ono těch oken právě není až tak málo, což jsem možná mohl uvést. Pokud vezmu tu levou část, tak tam se můžou objevit asi tak 4 různé okna/náhledy. Ale u té pravé strany je těch oken, které se tam můžou objevit až 24, což už mi přijde celkem dost. Některé si jsou sice podobné, ale přesto se jedná o odlišné okna (různé další grafy, spoustu nastavování apod.)

Edit: To co jsem načrtl byl jen návrh, jak bych si to představoval ve zjednodušené verzi, kterou bych pak aplikoval na můj případ. Také tedy počítám, že bych pro ViewModely vytvořil nějaké rozumné interface. Jinak pokud bych dělal aplikaci, kde by byly sotva tři okna, tak bych se na to vyprdl a aplikaci po staru prasácky nějak splácal. :D
Prochycz
Junior

Odeslat příspěvekod OS 20. 2. 2017 20:30

Co teď pracuji s MVVM, tak se určitě vyplatí to mít vše rozsekané na jednotlivé View a Viewmodel. Běžně může mít "jednookenní" aplikace klidně několik desítek až stovek viewmodelů.
Ale zas už potom člověk musí mít rozmyšlěné jak a co bude s čím komunikovat. Umět eventy, mít rozchozený nějaký IoC kontejner. Kdyžtak mrkni na Caliburn micro, to by ti mohlo pomoct.
OS
Junior

Odeslat příspěvekod powlcz 21. 2. 2017 08:46

Chronický Ujížděč na nevhodnostech
powlcz
Junior

Odeslat příspěvekod rudidlo 3. 3. 2017 13:18

Vyzkoušel jsem jak lightMVVM, tak i Caliburn Micro a osobně mi více vyhovuje Caliburn Micro. Má vyřešenu řadu věcí, které si kolegové v ostatních projektech museli psát sami. Mám obdobnou aplikaci, jen s tím rozdílem, že se jedná o WPF.

V hlavním okně běží dva viewmodely a pak mám třetí kontrolku s detailem operace, kde zobrazuji vždy požadované view na základě požadované operace.
Jsou dva druhy uživatelů počítačů. Ti první o svá data už přišli.
rudidlo
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků