Shrnutí kapitoly 18. MVVM

Download Sample Stažení ukázky

Poznámka:

Tato kniha byla publikována na jaře roku 2016 a od té doby nebyla aktualizována. Existuje mnoho v knize, která zůstává cenná, ale některé materiály jsou zastaralé a některá témata už nejsou zcela správná nebo úplná.

Jedním z nejlepších způsobů, jak navrhovat aplikaci, je oddělením uživatelského rozhraní od základního kódu, který se někdy označuje jako obchodní logika. Existuje několik technik, ale ten, který je přizpůsobený pro prostředí založená na XAML, se označuje jako Model-View-ViewModel nebo MVVM.

Vzájemné vztahy virtuálních počítačů MVVM

Aplikace MVVM má tři vrstvy:

  • Model poskytuje podkladová data, někdy prostřednictvím souborů nebo webových přístupů.
  • Zobrazení je uživatelské rozhraní nebo prezentační vrstva, obecně implementovaná v XAML.
  • Model ViewModel připojí model a zobrazení.

Model je ignorant modelu ViewModel a ViewModel je ignorant zobrazení. Tyto tři vrstvy se obvykle vzájemně propojují pomocí následujících mechanismů:

View, ViewModel, and View

V mnoha menších programech (a dokonce větších) často model chybí nebo je jeho funkce integrována do modelu ViewModel.

Modely Zobrazení a datová vazba

Aby bylo možné pracovat s datovými vazbami, model ViewModel musí být schopen oznámit zobrazení při změně vlastnosti ViewModel. Model ViewModel to provede implementací INotifyPropertyChanged rozhraní v System.ComponentModel oboru názvů. Jedná se spíše o část .NET než Xamarin.Forms. (Obecně se ViewModels pokouší zachovat nezávislost platformy.)

Rozhraní INotifyPropertyChanged deklaruje jednu událost s názvem PropertyChanged , která označuje vlastnost, která se změnila.

Hodiny Modelu zobrazení

Knihovna Book.Toolkit definuje vlastnost typuDateTime, která se mění na základě časovače.DateTimeViewModelXamarin.Forms Třída implementuje INotifyPropertyChanged a aktivuje PropertyChanged událost pokaždé, když se DateTime vlastnost změní.

Ukázka MvvmClock vytvoří instanci tohoto modelu ViewModel a pomocí datových vazeb na model ViewModel zobrazí aktualizované informace o datu a čase.

Interaktivní vlastnosti v modelu ViewModel

Vlastnosti v modelu ViewModel mohou být interaktivnější, jak ukazuje SimpleMultiplierViewModel třída, která je součástí ukázky SimpleMultiplier . Datové vazby poskytují násobené a násobené hodnoty ze dvou Slider prvků a zobrazí součin s hodnotou Label. V xaml však můžete provádět rozsáhlé změny v tomto uživatelském rozhraní bez následných změn souboru ViewModel nebo souboru s kódem.

Model zobrazení barev

Xamarin.FormsKnihovna ColorViewModel Book.Toolkit integruje barevné modely RGB a HSL. Ukazuje se v ukázce HslSliders :

Triple screenshot of TK

Zjednodušení modelu ViewModel

Kód v ViewModels lze zjednodušit definováním OnPropertyChanged metody pomocí atributu CallerMemberName , který získá název volající vlastnosti automaticky. Třída ViewModelBase v knihovně Xamarin.FormsBook.Toolkit to dělá a poskytuje základní třídu pro ViewModels.

Příkazové rozhraní

MVVM pracuje s datovými vazbami a datové vazby pracují s vlastnostmi, takže MVVM se zdá být nedostatečné, pokud jde o zpracování Clicked události Button nebo Tapped události události TapGestureRecognizer. Pokud chcete, aby objekty ViewModels zpracovávaly takové události, Xamarin.Forms podporuje příkazové rozhraní.

Příkazové rozhraní se manifestuje ve Button dvou veřejných vlastnostech:

Chcete-li podporovat příkazové rozhraní, ViewModel musí definovat vlastnost typu ICommand , která je pak data svázána s Command vlastností objektu Button. Rozhraní ICommand deklaruje dvě metody a jednu událost:

Objekt ViewModel interně nastaví každou vlastnost typu ICommand na instanci třídy, která implementuje ICommand rozhraní. Prostřednictvím datové vazby Button , zpočátku volá metodu CanExecute a zakáže sám sebe, pokud metoda vrátí false. Také nastaví obslužnou rutinu CanExecuteChanged události a volání CanExecute při každém vyvolání této události. Pokud je tato možnost Button povolená, volá metodu Execute pokaždé, když na ni Button kliknete.

Možná máte některé modely ViewModel, které jsou předprodejní Xamarin.Formsa tyto modely již mohou podporovat rozhraní příkazů. Pro nové Modely ViewModel, které mají být použity pouze s Xamarin.Forms, Xamarin.Forms poskytuje Command třídu a Command<T> třídu, která implementuje ICommand rozhraní. Obecný typ je typ argumentu pro metody Execute a CanExecute metody.

Provádění jednoduchých metod

Ukázka PowersOfThree ukazuje použití příkazového rozhraní v modelu ViewModel. Třída PowersViewModel definuje dvě vlastnosti typu ICommand a také definuje dvě privátní vlastnosti, které předá nejjednodušší Command konstruktoru. Program obsahuje datové vazby z tohoto modelu ViewModel na Command vlastnosti dvou Button prvků.

Prvky Button lze snadno nahradit TapGestureRecognizer objekty v XAML beze změn kódu.

Kalkulačka, téměř

Ukázka AddingMachine využívá jak Execute metody , tak CanExecute i metody ICommand. Používá třídu AdderViewModel v knihovně Xamarin.FormsBook.Toolkit. Model ViewModel obsahuje šest vlastností typu ICommand. Tyto jsou inicializovány z konstruktoru a Command konstruktoru CommandCommand<T> a konstruktoru .Command<T>Command Číselné klíče přidávaného počítače jsou všechny vázány na vlastnost, která je inicializována Command<T>s , a string argumentem pro Execute a CanExecute identifikuje konkrétní klíč.

ViewModels a životní cyklus aplikace

Použitý AdderViewModel v ukázce AddingMachine také definuje dvě metody pojmenované SaveState a RestoreState. Tyto metody se volají z aplikace, když přejde do režimu spánku a když se znovu spustí.