Skip to content

Commit

Permalink
MVVM hf utolsó átgonolós feladat
Browse files Browse the repository at this point in the history
  • Loading branch information
bzolka committed May 1, 2024
1 parent 8f2efce commit deaac82
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion docs/hazi/5-mvvm/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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,
- aháttérbena Visual Studio legyen, a `PersonListPageViewModel.cs` megnyitva.
- aháttérbena 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.

0 comments on commit deaac82

Please sign in to comment.