MVVM: co všechno může model vědět o view rubrika: Programování: .Net

4 pilif
položil/-a 26.8.2017

Zdravím ve spolek,
aktuálně řešíme tento problém.

Aplikace je postavena na WPF/PRISM, modely máme striktně odděleny od prezenční části (Views).
Přesto bychom potřebovali nějakou vazbu/referenci na view, které je nad modelem.
Nyní toto řešíme formou commandů do kterých je z views předáván parametr s rozhraním na view. Příslušný command pak může vykonat potřebnou interakci s view dle dostupného rozhraní.

Problém:
Model vykonává na pozadí ve vlákně nějakou déle trvající operaci spuštěnou buď automaticky anebo nějakým povelem uživatele či získáním signálu z vnějšku.
Během práce nebo typicky při ukončení vlákna je opět potřeba nějak pracovat s view. Konkrétně automaticky view zavřít.
Prakticky uvažujeme, že jeden model může mít na sobě "pověšeno" i více views.
Jak toto vyřešit:

  1. při přiřazování modelu k view mu předat rozhraní anebo nějaký identifikátor na dané view (něco jako void Add(IView view) a následně v případě potřeby zavolat z modelu metody rozhraní IView (např. Close)

  2. mít na view definovanou událost, která bude při přiřazování modelu k view na něj napojena. Model poté v případě potřeby projede seznam s připojenými callbacky do view a zavolá je s nějakým parametrem a view se postará o zbytek

Případně máte jinou radu?

Díky.

Komentáře

  • Anonym : Model nic o View vědět nemá. Pokud bych jen kouknul na wiki, tak je to jasné hned z "https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel" obrázku. 26.8.2017
odkaz
1 vojtechovsky
odpověděl/-a 1.9.2017

ViewModel musi byt ulne nezavisly na View.
Pozor neplati naopak.
View muze o ViewModel vedet uplne vse, dokonce ho vytvorit.

PRISM je pekny framework, ale komunitou celkem neaktivni. Chteli jsme ho pouzit, ale nakonec jsme zvolili reactiveui

ReactiveUi nam bezi ve winForms, WPF a na Xamarinu. Musim podotknout, ze vezmeme jen ViewModel, testy a vse ostatni uz je jen o dodelani Views na danou platformu.

Pro zobrazení všech 5 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.