diff --git a/docs/hazi/5-mvvm/index.md b/docs/hazi/5-mvvm/index.md index e6e6677..1ab5645 100644 --- a/docs/hazi/5-mvvm/index.md +++ b/docs/hazi/5-mvvm/index.md @@ -288,4 +288,19 @@ Teszteld a megoldást (életkor csökkentése), ugyanúgy kell működnie, mint Készíts egy képernyőmentést `f5.png` néven az alábbiak szerint: - Indítsd el az alkalmazást. Ha szükséges, méretezd át kisebbre, hogy ne foglaljon sok helyet a képernyőn, - - a „háttérben” a Visual Studio legyen, a `PersonListPageViewModel.cs` megnyitva. \ No newline at end of file + - a „háttérben” a Visual Studio legyen, a `PersonListPageViewModel.cs` megnyitva. + +## Feladat 6 - Strict MVVM + +Jelen megoldásunk a Relaxed MVVM megközelítést követi. A következő lépésekben átgondoljuk, mit is jelent ez pontosan, és mit jelentene a Strict MVVM megközelítésre való átállás (megvalósítani nem fogjuk). + +Jelen megoldásunk a Relaxed MVVM megközelítést követi, vagyis a View-ban közvetlenül a `Person` modell osztályhoz adatkötünk (és a `PersonPageViewModel`-ben is a `Person` modell osztályt használjuk). Ennek előnye az egyszerűség. De van egy hátránya is: a `Person` modell osztályunkban kénytelenek voltunk megvalósítani az `INotifyPropertyChanged` interfészt (mégha az MVVM toolkit segítségével is), különben nem működne jól az adatkötés. Vannak olyan helyzetek, amikor a modell osztályunkat nem szeretnénk ilyen, némiképpen már a felületet kiszolgáló logikával "szennyezni", hanem a lehető legtisztább formában szeretnénk a modell osztályunkat tartani. Ekkor a Strict MVVM megközelítés jelenti a megoldást (lásd "Strict MVVM – beágyazás" előadásdia). Mit jelentene ez a számunkra, mit kellene a kódon változtatni? Gondold át az előadásdia alapján a szükséges változtatásokat! Megvalósítani/dokumentálni nem kell, ez csak egy átgondolós feladat 😊! + +??? tip "String MVVM alapú megoldás" + * A `Person` modell osztályban már nem valósítanánk meg az `INotifyPropertyChanged` interfészt, az osztály leegyszerűsödik, csak egyszerű tulajdonságokat tartalmazna (ez volt a cél). + * Be kellene vezetni egy `PersonViewModel` osztályt (mely egy `Person` modell objektumot csomagolna be). Ebben: + * Be kellene vezetni a `Name` és `Age` tulajdonságokat. + * Meg kellene valósítani az `INotifyPropertyChanged` interfészt: + * `ObservableObject` származtatás + * A tulajdonságok setterében a `SetProperty` ősből örökölt segédfüggvény használata (hogy kiváltódjon a `PropertyChanged` esemény) + * A Viewhoz tartozó `PersonPageViewModel`-ünket át kellene alakítani, hogy ne a `Person` modell, hanem az új `PersonViewModel`-t használja. \ No newline at end of file