Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Not
Bu kitap 2016 baharında yayımlanmıştır ve o zamandan beri güncellenmemiştir. Kitapta değerli kalan çok şey vardır, ancak bazı malzemeler eskidir ve bazı konular artık tamamen doğru veya eksiksiz değildir.
Bir uygulamanın mimarisini oluşturmanın en iyi yollarından biri, kullanıcı arabirimini bazen iş mantığı olarak adlandırılan temel koddan ayırmaktır. Çeşitli teknikler vardır, ancak XAML tabanlı ortamlar için uyarlanmış olan Model-View-ViewModel veya MVVM olarak bilinir.
MVVM ilişkileri
MVVM uygulamasının üç katmanı vardır:
- Model, bazen dosyalar veya web erişimleri aracılığıyla temel alınan veriler sağlar
- Görünüm, genellikle XAML'de uygulanan kullanıcı arabirimi veya sunu katmanıdır
- ViewModel, Modeli ve Görünümü birbirine bağlar
Model, ViewModel'i bilmez ve ViewModel de Görünüm'ü bilmez. Bu üç katman genellikle aşağıdaki mekanizmaları kullanarak birbirine bağlanır:

Daha küçük birçok programda (ve hatta daha büyük programlarda), genellikle Model yoktur veya işlevi ViewModel ile tümleştirilir.
ViewModels ve veri bağlama
Veri bağlamalarıyla etkileşime geçmek için ViewModel'in bir özelliği değiştiğinde ViewModel'e bildirimde bulunabilmelidir. ViewModel bunu, ad alanında System.ComponentModel arabirimini uygulayarak INotifyPropertyChanged yapar. Bu, yerine Xamarin.Forms.NET'in bir parçasıdır. (Genel Olarak ViewModel'ler platform bağımsızlığını korumaya çalışır.)
Arabirimi, INotifyPropertyChanged değiştirilen özelliği gösteren adlı PropertyChanged tek bir olay bildirir.
ViewModel saati
Book.Toolkit kitaplığındaXamarin.Forms, zamanlayıcıya göre değişen tür DateTime özelliğini tanımlar. DateTimeViewModel sınıfı, özellik her DateTime değiştiğinde PropertyChanged olayı uygular INotifyPropertyChanged ve başlatır.
MvvmClock örneği bu ViewModel'in örneğini oluşturur ve güncelleştirilmiş tarih ve saat bilgilerini görüntülemek için ViewModel'e veri bağlamaları kullanır.
ViewModel'deki etkileşimli özellikler
Bir ViewModel'deki özellikler, SimpleMultiplier örneğinin SimpleMultiplierViewModel bir parçası olan sınıfı tarafından gösterildiği gibi daha etkileşimli olabilir. Veri bağlamaları iki Slider öğeden multiplicand ve çarpan değerleri sağlar ve ürünü ile Labelgörüntüler. Ancak, XAML'de bu kullanıcı arabiriminde ViewModel veya arka planda kod dosyasında herhangi bir değişiklik olmadan kapsamlı değişiklikler yapabilirsiniz.
Renk GörünümüModeli
Book.Toolkit kitaplığındakiXamarin.Forms, RGB ve HSL renk modellerini tümleştirir. ColorViewModel HslSliders örneğinde gösterilmiştir :
ViewModel'i Akışa Alma
ViewModels'teki kod, çağrı özelliği adını otomatik olarak alan özniteliği kullanılarak CallerMemberName bir OnPropertyChanged yöntem tanımlanarak kolaylaştırılabilir. Book.Toolkit kitaplığındakiXamarin.Forms sınıf bunu yapar ve ViewModels için bir temel sınıf sağlar. ViewModelBase
Komut arabirimi
MVVM veri bağlamalarıyla ve veri bağlamaları özelliklerle çalıştığından, bir veya Tapped bir olayının işlenmesi Clicked söz konusu olduğunda MVVM'nin Button TapGestureRecognizereksik olduğu görülüyor. ViewModel'lerin bu tür olayları Xamarin.Forms işlemesine izin vermek için komut arabirimini destekler.
Komut arabirimi, içinde iki genel özellik ile kendini Button bildirir:
CommandtürüICommand(ad alanındaSystem.Windows.Inputtanımlanır)CommandParametertürüObject
Komut arabirimini desteklemek için, ViewModel öğesinin ICommand özelliğine Command bağlı olan türde bir özellik tanımlaması Buttongerekir. ICommand Arabirimi iki yöntem ve bir olay bildirir:
ExecuteTür bağımsız değişkenine sahip bir yöntemobjectCanExecuteDöndüren türobjectbağımsız değişkenine sahip bir yöntembool- Bir
CanExecuteChangedolay
Dahili olarak, ViewModel türündeki ICommand her özelliği arabirimi uygulayan bir sınıfın örneğine ICommand ayarlar. Veri bağlaması aracılığıyla, Button başlangıçta yöntemini çağırır CanExecute ve yöntemi döndürürse falsekendisini devre dışı bırakır. Ayrıca olay için CanExecuteChanged bir işleyici ayarlar ve olay her tetiklendiğinde çağırır CanExecute . Button etkinleştirilirse, öğesine her Button tıklandığında yöntemini çağırırExecute.
öncesi Xamarin.Formsolan bazı ViewModel'leriniz olabilir ve bunlar zaten komut arabirimini destekliyor olabilir. Yalnızca ile Xamarin.FormsXamarin.Forms kullanılması amaçlanan yeni ViewModel'ler için bir Command sınıf ve arabirimini uygulayan ICommand bir Command<T> sınıf sağlar. Genel tür, ve CanExecute yöntemleri için bağımsız değişkenin Execute türüdür.
Basit yöntem yürütmeleri
PowersOfThree örneği, ViewModel'de komut arabiriminin nasıl kullanılacağını gösterir. sınıfı PowersViewModel türündeki ICommand iki özelliği tanımlar ve ayrıca en Command basit oluşturucuya geçirdiği iki özel özelliği tanımlar. Program, bu ViewModel'den iki Button öğe özelliklerine Command veri bağlamaları içerir.
Öğeler Button , kod değişikliği olmadan XAML'deki nesnelerle TapGestureRecognizer kolayca değiştirilebilir.
Hesap makinesi, neredeyse
AddingMachine örneği hem ve Execute CanExecute yöntemlerini ICommandkullanır. Book.Toolkit kitaplığında Xamarin.Formsbir AdderViewModel sınıf kullanır. ViewModel türünde ICommandaltı özellik içerir. Bunlar oluşturucusundan Command veCommand oluşturucusundan Command veCommand<T> oluşturucusundan Command<T>başlatılır. Ekleme makinesinin sayısal anahtarlarının tümü ile Command<T>başlatılan özelliğe bağlıdır ve için bir string bağımsız değişkendir Execute ve CanExecute belirli anahtarı tanımlar.
ViewModels ve uygulama yaşam döngüsü
AdderViewModel AddingMachine örneğinde kullanılan, ve RestoreStateadlı SaveState iki yöntemi de tanımlar. Bu yöntemler, uyku moduna geçtiğinde ve yeniden başlatıldığında uygulamadan çağrılır.
