Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ů:

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.DateTimeViewModel Xamarin.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 :
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:
CommandtypuICommand(definovanéhoSystem.Windows.Inputv oboru názvů)CommandParametertypuObject
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:
- Metoda
Executes argumentem typuobject - Metoda
CanExecutes argumentem typuobject, který vracíbool - Událost
CanExecuteChanged
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 Command Command<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í.
