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.
Bu makalede, geçişinizi kolaylaştırmak için MvvmLight Toolkit ile MVVM Araç Seti arasındaki bazı önemli farklar özetlenmiştir.
Bu makale özellikle MvvmLight'tan MVVM Araç Seti'ne geçişlere odaklansa da, MVVM Araç Seti'nde yapılan ek iyileştirmeler olduğuna dikkat edin, bu nedenle tek tek yeni API'lerin belgelerine göz atmanızı kesinlikle öneririz.
Platform API'leri:
ObservableObject,ObservableRecipient,RelayCommand,RelayCommand<T>,AsyncRelayCommand, ,AsyncRelayCommand<T>,IMessengerWeakReferenceMessengerStrongReferenceMessengerIRecipient<TMessage>,MessageHandler<TRecipient, TMessage>IMessengerExtensions
MVVM Araç Seti'ni yükleme
MVVM Araç Seti'nin avantajlarından yararlanmak için öncelikle mevcut .NET uygulamanıza en son NuGet paketini yüklemeniz gerekir.
.NET CLI aracılığıyla yükleme
dotnet add package CommunityToolkit.Mvvm --version 8.1.0
PackageReference aracılığıyla yükleme
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.1.0" />
ObservableObject'i Geçirme
Aşağıdaki adımlar, MvvmLight Toolkit'in ObservableObject avantajlarından yararlanan mevcut bileşenlerinizi geçirmenize odaklanır. MVVM Araç Seti, buna benzer bir ObservableObject türü sunar.
Buradaki ilk değişiklik, bileşenlerinizdeki yönergeleri kullanarak değiştirilecek.
// MvvmLight
using GalaSoft.MvvmLight;
// MVVM Toolkit
using CommunityToolkit.Mvvm.ComponentModel;
Geçerli çözümünüzde kullanılıyorsa gerçekleştirilmesi gereken geçişlerin listesi aşağıdadır.
ObservableObject yöntemleri
Set<T>(Expression, ref T, T)
Set(Expression, ref T, T) için yöntem imzasının bire bir karşılığı yoktur.
Ancak, SetProperty(ref T, T, string) ek performans avantajlarıyla aynı işlevselliği sağlar.
// MvvmLight
Set(() => MyProperty, ref this.myProperty, value);
// MVVM Toolkit
SetProperty(ref this.myProperty, value);
Burada da görülebileceği gibi, yöntem özelliğin ayarlayıcısından çağrılıyorsa `string` parametresi gerekli değildir; çünkü bu parametre çağıran üyenin adından çıkarılır. Yöntemin çağrıldığı özellikten farklı bir özellik için çağırmak SetProperty istiyorsanız, işlecini nameof kullanarak bunu yapabilirsiniz; bu, kodun sabit kodlanmış adlara sahip olmamasıyla daha az hataya açık hale getirme açısından yararlı olabilir. Örneğin:
SetProperty(ref this.someProperty, value, nameof(SomeProperty));
Set<T>(string, ref T, T)
Set<T>(string, ref T, T) benzer yöntem imzası değişimine sahip değildir.
Ancak, SetProperty<T>(ref T, T, string) yeniden sıralanmış parametrelerle aynı işlevi sağlar.
// MvvmLight
Set(nameof(MyProperty), ref this.myProperty, value);
// MVVM Toolkit
SetProperty(ref this.myProperty, value);
Set<T>(ref T, T, string)
Set<T>(ref T, T, string) , olarak yeniden adlandırılmış bir doğrudan değiştirme işlemine SetProperty<T>(ref T, T, string)sahiptir.
// MvvmLight
Set(ref this.myProperty, value, nameof(MyProperty));
// MVVM Toolkit
SetProperty(ref this.myProperty, value);
RaisePropertyChanged(string)
RaisePropertyChanged(string) yerine, yeniden adlandırılmış doğrudan bir alternatif olan OnPropertyChanged(string) kullanılır.
// MvvmLight
RaisePropertyChanged(nameof(MyProperty));
// MVVM Toolkit
OnPropertyChanged();
SetProperty ile olduğu gibi, geçerli özelliğin adı OnPropertyChanged yöntemi tarafından otomatik olarak çıkarılır. Başka bir özellik için olayı el ile yükseltmek PropertyChanged için bu yöntemi kullanmak istiyorsanız, işlecini yeniden kullanarak nameof bu özelliğin adını el ile de belirtebilirsiniz. Örneğin:
OnPropertyChanged(nameof(SomeProperty));
RaisePropertyChanged<T>(Expression)
RaisePropertyChanged<T>(Expression) için doğrudan bir karşılık yoktur.
Performansı artırmak için, RaisePropertyChanged<T>(Expression) yerine Toolkit’in OnPropertyChanged(string) öğesini nameof anahtar sözcüğünü kullanarak kullanmanız önerilir (veya hedef özellik, yöntemi çağıran özellikle aynıysa parametre vermeden; böylece ad, yukarıda belirtildiği gibi otomatik olarak belirlenebilir).
// MvvmLight
RaisePropertyChanged(() => MyProperty);
// MVVM Toolkit
OnPropertyChanged(nameof(MyProperty));
VerifyPropertyName(string)
VerifyPropertyName(string) yöntemi için doğrudan bir karşılık yoktur ve bu yöntemi kullanan tüm kodlar değiştirilmelidir veya kaldırılmalıdır.
MVVM Toolkit'te buna yer verilmemesinin nedeni, bir özellik için nameof anahtar sözcüğünün kullanılmasının o özelliğin varlığını doğrulamasıdır. MvvmLight oluşturulduğunda anahtar nameof sözcüğü kullanılamaz ve özelliğin nesnede mevcut olduğundan emin olmak için bu yöntem kullanılmıştır.
// MvvmLight
VerifyPropertyName(nameof(MyProperty));
// MVVM Toolkit
// No direct replacement, remove
ObservableObject özellikleri
PropertyChangedHandler
PropertyChangedHandler doğrudan bir karşılığı yoktur.
PropertyChanged olay işleyicisi aracılığıyla bir özellik değişikliği olayı tetiklemek için bunun yerine OnPropertyChanged yöntemini çağırmanız gerekir.
// MvvmLight
PropertyChangedEventHandler handler = PropertyChangedHandler;
// MVVM Toolkit
OnPropertyChanged();
ViewModelBase'i Geçirme
Aşağıdaki adımlar, MvvmLight Toolkit'in ViewModelBase avantajlarından yararlanan mevcut bileşenlerinizi geçirmenize odaklanır.
MVVM Araç Seti benzer işlevler sağlayan bir ObservableRecipient tür sağlar.
Geçerli çözümünüzde kullanılıyorsa gerçekleştirilmesi gereken geçişlerin listesi aşağıdadır.
ViewModelBase yöntemleri
Set<T>(string, ref T, T, bool)
Set<T>(string, ref T, T, bool) benzer yöntem imzası değişimine sahip değildir.
Ancak, SetProperty<T>(ref T, T, bool, string) yeniden sıralanmış parametrelerle aynı işlevi sağlar.
// MvvmLight
Set(nameof(MyProperty), ref this.myProperty, value, true);
// MVVM Toolkit
SetProperty(ref this.myProperty, value, true);
Unutmayın, değer ve broadcast mantıksal parametreleri MVVM Toolkit uygulamasında isteğe bağlı değildir ve bu yöntemin kullanılabilmesi için belirtilmelidir. Bu değişikliğin nedeni, bu yöntemi çağırırken broadcast parametresini atlayarak varsayılan olarak ObservableObject yöntemini çağırmasıdır SetProperty .
Ayrıca, string yöntemi, aynı temel ObservableObject sınıftaki yöntemlerde olduğu gibi çağıran üye adından çıkarıldığı için özelliğin ayarlayıcısından çağrılırsa parametresi gerekli değildir.
Set<T>(ref T, T, bool, string)
Set<T>(ref T, T, bool, string) adlı öğenin yeniden adlandırılmış doğrudan karşılığı SetProperty<T>(ref T, T, bool, string)’dir.
// MvvmLight
Set(ref this.myProperty, value, true, nameof(MyProperty));
// MVVM Toolkit
SetProperty(ref this.myProperty, value, true);
Set<T>(Expression, ref T, T, bool)
Set<T>(Expression, ref T, T, bool) doğrudan bir karşılığa sahip değildir.
Daha iyi performans için, bunu bunun yerine nameof anahtar sözcüğünü kullanan MVVM Toolkit’in SetProperty<T>(ref T, T, bool, string) öğesiyle değiştirmeniz önerilir.
// MvvmLight
Set<MyObject>(() => MyProperty, ref this.myProperty, value, true);
// MVVM Toolkit
SetProperty(ref this.myProperty, value, true);
Broadcast<T>(T, T, string)
Broadcast<T>(T, T, string) yeniden adlandırma gerektirmeyen doğrudan değiştirme işlemine sahiptir.
// MvvmLight
Broadcast<MyObject>(oldValue, newValue, nameof(MyProperty));
// MVVM Toolkit
Broadcast(oldValue, newValue, nameof(MyProperty));
Unutmayın, Broadcast yöntemi çağrılırken Messenger özelliği aracılığıyla gönderilen iletinin, MVVM Toolkit kitaplığında PropertyChangedMessage için doğrudan bir karşılığı vardır.
RaisePropertyChanged<T>(string, T, T, bool)
RaisePropertyChanged<T>(string, T, T, bool) yöntemi için doğrudan bir karşılık yoktur.
En basit alternatif, bu işlevselliği sağlamak için OnPropertyChanged çağırmak ve ardından Broadcast çağırmaktır.
// MvvmLight
RaisePropertyChanged<MyObject>(nameof(MyProperty), oldValue, newValue, true);
// MVVM Toolkit
OnPropertyChanged();
Broadcast(oldValue, newValue, nameof(MyProperty));
RaisePropertyChanged<T>(Expression, T, T, bool)
RaisePropertyChanged<T>(Expression, T, T, bool) yöntemi için doğrudan bir alternatif yoktur.
En basit alternatif, bu işlevi sağlamak için OnPropertyChanged çağrısını yapmak ve ardından Broadcast çağrısını yapmaktır.
// MvvmLight
RaisePropertyChanged<MyObject>(() => MyProperty, oldValue, newValue, true);
// MVVM Toolkit
OnPropertyChanged(nameof(MyProperty));
Broadcast(oldValue, newValue, nameof(MyProperty));
ICleanup.Cleanup()
ICleanup arabiriminin doğrudan bir yerine geçen sürümü yoktur.
Ancak, ObservableRecipient, Cleanup ile aynı işlevselliği sağlamak için kullanılması gereken bir OnDeactivated yöntemi sağlar.
OnDeactivated MVVM Araç Seti'nde çağrıldığında, kayıtlı tüm ileti olaylarının kayıtlarını da kaldırır.
// MvvmLight
Cleanup();
// MVVM Toolkit
OnDeactivated();
OnActivated ve OnDeactivated yöntemlerinin, Cleanup ile olduğu gibi, mevcut çözümünüzden çağrılabileceğini unutmayın.
Ancak, ObservableRecipient ayarlandığında bu yöntemlere yapılan çağrıyı da denetleen bir IsActive özelliği kullanıma sunar.
ViewModelBase özellikleri
MessengerInstance
MessengerInstance , olarak yeniden adlandırılmış bir doğrudan değiştirme işlemine Messengersahiptir.
// MvvmLight
IMessenger messenger = MessengerInstance;
// MVVM Toolkit
IMessenger messenger = Messenger;
Note
Messenger özelliğinin varsayılan değeri, MVVM Araç Seti'ndeki standart zayıf başvuru mesajlaşma uygulaması olan WeakReferenceMessenger.Default örneği olacaktır. Bu, ObservableRecipient oluşturucusuna yalnızca farklı bir IMessenger örneği enjekte edilerek özelleştirilebilir.
IsInDesignMode
IsInDesignMode özelliğinin doğrudan bir karşılığı yoktur ve bu özelliği kullanan herhangi bir kod değiştirilmeli veya kaldırılmalıdır.
MVVM Araç Seti’nden çıkarılmasının nedeni, IsInDesignMode özelliğinin platforma özgü uygulamaları açığa çıkarmasıdır. MVVM Araç Seti platformdan bağımsız olacak şekilde tasarlanmıştır.
// MvvmLight
var isInDesignMode = IsInDesignMode;
// MVVM Toolkit
// No direct replacement, remove
ViewModelBase statik özellikleri
IsInDesignModeStatic
IsInDesignModeStatic özelliğinin doğrudan bir karşılığı yoktur ve bu özelliği kullanan tüm kodlar değiştirilmeli veya kaldırılmalıdır.
MVVM Araç Seti'nden çıkarılmasının nedeni, IsInDesignMode özelliğinin platforma özgü uygulamalar sunmasıdır. MVVM Araç Seti platformdan bağımsız olacak şekilde tasarlanmıştır.
// MvvmLight
var isInDesignMode = ViewModelBase.IsInDesignModeStatic;
// MVVM Toolkit
// No direct replacement, remove
RelayCommand'i Geçirme
Aşağıdaki adımlar, MvvmLight Toolkit'in RelayCommand avantajlarından yararlanan mevcut bileşenlerinizi geçirmenize odaklanır.
MVVM Toolkit, ICommand sistem arabiriminden yararlanarak bire bir eşdeğer işlevsellik sunan bir RelayCommand türü sağlar.
Geçerli çözümünüzde kullanılıyorsa gerçekleştirilmesi gereken geçişlerin listesi aşağıdadır. Bir yöntem veya özellik listelenmemişse, MVVM Araç Seti'nde aynı adlı doğrudan bir karşılığı vardır ve herhangi bir değişiklik gerekmez.
Buradaki ilk değişiklik, bileşenlerinizdeki using yönergelerinin değiştirilmesi olacaktır.
// MvvmLight
using GalaSoft.MvvmLight.Command;
using Galasoft.MvvmLight.CommandWpf;
// MVVM Toolkit
using CommunityToolkit.Mvvm.Input;
Note
MvvmLight, komut ile ilgili sınıftan çağrılan eylem arasındaki bağlantıyı kurmak için zayıf başvurular kullanır. Bu, MVVM Toolkit uygulaması için gerekli değildir ve bu isteğe bağlı parametre oluşturucularınızdan herhangi birinde olarak ayarlandıysa true , bu kaldırılacaktır.
RelayCommand'i zaman uyumsuz eylemlerle kullanma
Şu anda zaman uyumsuz eylemlerle MvvmLight RelayCommand uygulamasını kullanıyorsanız, MVVM Araç Seti bu senaryolar için geliştirilmiş bir uygulama sunar.
Mevcut RelayCommand öğenizi, eşzamansız kullanım için geliştirilmiş AsyncRelayCommand ile kolayca değiştirebilirsiniz.
// MvvmLight
var command = new RelayCommand(() => OnCommandAsync());
var command = new RelayCommand(async () => await OnCommandAsync());
// MVVM Toolkit
var asyncCommand = new AsyncRelayCommand(OnCommandAsync);
RelayCommand yöntemleri
RaiseCanExecuteChanged()
işlevine RaiseCanExecuteChanged() MVVM Toolkit'in NotifyCanExecuteChanged() yöntemiyle ulaşılabilir.
// MvvmLight
var command = new RelayCommand(OnCommand);
command.RaiseCanExecuteChanged();
// MVVM Toolkit
var command = new RelayCommand(OnCommand);
command.NotifyCanExecuteChanged();
Taşıma RelayCommand<T>
Aşağıdaki adımlar, MvvmLight Toolkit'in RelayCommand<T> avantajlarından yararlanan mevcut bileşenlerinizi geçirmenize odaklanır.
MVVM Araç Seti, ICommand System arabiriminden yararlanan ve bire bir eşdeğer işlevsellik sunan bir RelayCommand<T> türü sağlar.
Geçerli çözümünüzde kullanılıyorsa gerçekleştirilmesi gereken geçişlerin listesi aşağıdadır. Bir yöntem veya özellik listelenmemişse, MVVM Araç Seti'nde aynı adı taşıyan doğrudan bir karşılığı vardır ve herhangi bir değişiklik yapılması gerekmez.
Buradaki ilk değişiklik, bileşenlerinizdeki using yönergelerini değiştirmek olacak.
// MvvmLight
using GalaSoft.MvvmLight.Command;
using Galasoft.MvvmLight.CommandWpf;
// MVVM Toolkit
using CommunityToolkit.Mvvm.Input;
RelayCommand eşzamansız işlemlerle kullanımı
Şu anda zaman uyumsuz eylemlerle MvvmLight RelayCommand<T> uygulamasını kullanıyorsanız, MVVM Araç Seti bu senaryolar için geliştirilmiş bir uygulama sunar.
Mevcut RelayCommand<T> öğenizi, asenkron kullanım için oluşturulmuş AsyncRelayCommand<T> ile değiştirmeniz yeterlidir.
// MvvmLight
var command = new RelayCommand<string>(async () => await OnCommandAsync());
// MVVM Toolkit
var asyncCommand = new AsyncRelayCommand<string>(OnCommandAsync);
RelayCommand<T> Yöntemler
RaiseCanExecuteChanged()
işlevine RaiseCanExecuteChanged() MVVM Toolkit'in NotifyCanExecuteChanged() yöntemiyle ulaşılabilir.
// MvvmLight
var command = new RelayCommand<string>(OnCommand);
command.RaiseCanExecuteChanged();
// MVVM Toolkit
var command = new RelayCommand<string>(OnCommand);
command.NotifyCanExecuteChanged();
Taşıma SimpleIoc
MVVM Araç Seti'ndeki IoC uygulaması, bağımlılık eklemeyi kendi başına işlemek için yerleşik mantık içermez, bu nedenle yönteme geçirebileceğiniz IServiceProvider bir örneği almak için herhangi bir Ioc.ConfigureServices üçüncü taraf kitaplığını kullanabilirsiniz. Aşağıdaki örneklerde, ServiceCollection kitaplığındaki Microsoft.Extensions.DependencyInjection türü kullanılır.
Bu, MvvmLight ile MVVM Araç Seti arasındaki en büyük değişikliktir.
ASP.NET Core uygulamalarıyla bağımlılık ekleme uyguladıysanız bu uygulama tanıdık gelecek.
Bağımlılıklarınızı kaydetme
MvvmLight ile, bağımlılıklarınızı SimpleIoc kullanarak bu senaryolarda olduğu gibi kaydetmiş olabilirsiniz.
public void RegisterServices()
{
SimpleIoc.Default.Register<INavigationService, NavigationService>();
SimpleIoc.Default.Register<IDialogService>(() => new DialogService());
}
MVVM Araç Seti ile aşağıdakiyle aynı başarıyı elde edebilirsiniz.
public void RegisterServices()
{
Ioc.Default.ConfigureServices(
new ServiceCollection()
.AddSingleton<INavigationService, NavigationService>()
.AddSingleton<IDialogService>(new DialogService())
.BuildServiceProvider());
}
Bağımlılıkları çözme
Başlatıldıktan sonra hizmetler, tıpkı SimpleIoc ile olduğu gibi, Ioc sınıfından alınabilir:
IDialogService dialogService = SimpleIoc.Default.GetInstance<IDialogService>();
MVVM Araç Seti'ne geçiş yaparak aşağıdakileri yapacaksınız:
IDialogService dialogService = Ioc.Default.GetService<IDialogService>();
Bağımlılıkları kaldırma
ile SimpleIocaşağıdaki yöntem çağrısıyla bağımlılıklarınızın kaydını kaldırabilirsiniz.
SimpleIoc.Default.Unregister<INavigationService>();
MVVM Toolkit Ioc uygulamasıyla bağımlılıkları kaldırmak için doğrudan bir değişiklik yoktur.
Tercih edilen oluşturucu
Bağımlılıklarınızı MvvmLight'ın SimpleIocöğesine kaydederken, sınıflarınızda birden çok oluşturucuya sahip olanlar için bir PreferredConstructor öznitelik sağlama seçeneğiniz vardır.
Bu özniteliğin, kullanıldığı her yerde kaldırılması gerekir ve destekleniyorsa, kullanımda olan 3. taraf bağımlılık enjeksiyonu kitaplığındaki ilgili öznitelikleri kullanmanız gerekir.
Geçirme Messenger
Aşağıdaki adımlar, MvvmLight Toolkit'in Messenger avantajlarından yararlanan mevcut bileşenlerinizi geçirmenize odaklanır.
MVVM Araç Seti, benzer işlevler sağlayan ve aşağıda ayrıntılarıyla belirtilen bazı önemli farklılıklar içeren iki messenger uygulaması (WeakReferenceMessengerve StrongReferenceMessengerburadaki belgelere bakın) sağlar.
Geçerli çözümünüzde kullanılıyorsa gerçekleştirilmesi gereken geçişlerin listesi aşağıdadır.
Buradaki ilk değişiklik, bileşenlerinizdeki yönergeleri kullanarak değiştirilecek.
// MvvmLight
using GalaSoft.MvvmLight.Messaging;
// MVVM Toolkit
using CommunityToolkit.Mvvm.Messaging;
Messenger yöntemleri
Register<TMessage>(object, Action<TMessage>)
Register<TMessage>(object, Action<TMessage>) işlevselliği, MVVM Toolkit'in IMessenger uzantı yöntemi Register<TRecipient, TMessage>(object, MessageHandler<TRecipient, TMessage>) ile sağlanabilir.
// MvvmLight
Messenger.Default.Register<MyMessage>(this, this.OnMyMessageReceived);
// MVVM Toolkit
Messenger.Register<MyViewModel, MyMessage>(this, static (r, m) => r.OnMyMessageReceived(m));
Bu imzanın nedeni, ileti aracısının alıcıları düzgün şekilde izlemek için zayıf referanslar kullanabilmesini ve alıcının kendisini yakalamak üzere closure’lar oluşturmasını önlemesidir. Yani, girdi alıcısı lambda ifadesine girdi olarak aktarılır; bu nedenle lambda ifadesinin kendisi tarafından yakalanmasına gerek kalmaz. Aynı işleyici ayırma olmadan birden çok kez yeniden kullanılabilir olduğundan, bu da daha verimli bir kodla sonuçlanabilir. Bunun, işleyicileri kaydetmek için desteklenen yollardan yalnızca biri olduğunu ve bunun yerine IRecipient<TMessage> arabiriminin de kullanılabileceğini unutmayın (Messenger belgelerinde ayrıntılı olarak açıklanmıştır); bu, kaydı otomatikleştirir ve daha sade hale getirir.
Note
static Lambda ifadeleri için değiştirici C# 9 gerektirir ve isteğe bağlıdır. Burada bunu kullanmak, alıcıyı veya başka bir üyeyi yanlışlıkla yakalamadığınızdan ve dolayısıyla bir closure oluşturulmasına neden olmadığınızdan emin olmak açısından yararlı olabilir, ancak zorunlu değildir. C# 9 kullanamıyorsanız, buradaki static öğesini kaldırabilir; kodun hiçbir şeyi yakalamadığından emin olmak için dikkatli olabilirsiniz.
Ayrıca, bu örnek ve aşağıdaki örnekler yalnızca ObservableRecipient içindeki Messenger özelliğini kullanacaktır. Kodunuzun başka herhangi bir yerinden bir messenger örneğine yalnızca statik olarak erişmek istiyorsanız, aynı örnekler burada da geçerlidir; tek fark, Messenger yerine örneğin başka bir ifadenin kullanılması gerekmesidir. Bunun yerine WeakReferenceMessenger.Default kullanın.
Register<TMessage>(object, bool, Action<TMessage>)
Türetilmiş ileti türleri için de ileti alımını desteklemenizi sağlayan bu kayıt mekanizmasının doğrudan bir karşılığı yoktur.
Messenger uygulaması performans avantajlarını elde etmek için yansıma kullanmamayı amaçladığından, bu değişiklik kasıtlıdır.
Alternatif olarak, bu işlevselliği elde etmek için yapılabilecek birkaç seçenek vardır.
- Özel
IMessengerbir uygulama oluşturun. - Paylaşılan bir işleyici kullanarak ek ileti türlerini kaydedin, sonra türü denetler ve doğru yöntemi çağırır.
// MvvmLight
Messenger.Default.Register<MyMessage>(this, true, this.OnMyMessageReceived);
// MVVM Toolkit
Messenger.Register<MyViewModel, MyMessage>(this, static (r, m) => r.OnMyMessageReceived(m));
Messenger.Register<MyViewModel, MyOtherMessage>(this, static (r, m) => r.OnMyMessageReceived(m));
Register<TMessage>(object, object, Action<TMessage>)
işlevine Register<TMessage>(object, object, Action<TMessage>) MVVM Toolkit'in Register<TRecipient, TMessage, TToken>(object, TToken, MessageHandler<TRecipient, TMessage>) yöntemiyle ulaşılabilir.
// MvvmLight
Messenger.Default.Register<MyMessage>(this, nameof(MyViewModel), this.OnMyMessageReceived);
// MVVM Toolkit
Messenger.Register<MyViewModel, MyMessage, string>(this, nameof(MyViewModel), static (r, m) => r.OnMyMessageReceived(m));
Register<TMessage>(object, object, bool, Action<TMessage>)
Türetilmiş ileti türleri için de ileti almayı destekleyen bu kayıt mekanizmasının doğrudan bir karşılığı yoktur. Bu değişiklik kasıtlıdır; çünkü Messenger uygulaması, performans avantajlarını elde etmek için reflection kullanmamayı amaçlar.
Alternatif olarak, bu işlevselliği elde etmek için yapılabilecek birkaç seçenek vardır.
- Özel
IMessengerbir uygulama oluşturun. - Paylaşılan bir işleyici kullanarak ek ileti türlerini kaydedin, sonra türü denetler ve doğru yöntemi çağırır.
// MvvmLight
Messenger.Default.Register<MyMessage>(this, nameof(MyViewModel), true, this.OnMyMessageReceived);
// MVVM Toolkit
Messenger.Register<MyViewModel, MyMessage, string>(this, nameof(MyViewModel), static (r, m) => r.OnMyMessageReceived(m));
Messenger.Register<MyViewModel, MyOtherMessage, string>(this, nameof(MyViewModel), static (r, m) => r.OnMyMessageReceived(m));
Send<TMessage>(TMessage)
Send<TMessage>(TMessage) işlevselliği, MVVM Toolkit'in IMessenger uzantı yöntemi Send<TMessage>(TMessage) ile sağlanabilir.
// MvvmLight
Messenger.Default.Send<MyMessage>(new MyMessage());
Messenger.Default.Send(new MyMessage());
// MVVM Toolkit
Messenger.Send(new MyMessage());
Gönderilen iletinin parametresiz bir oluşturucuya sahip olduğu yukarıdaki senaryoda, MVVM Araç Seti'nin bu biçimde bir ileti göndermek için basitleştirilmiş bir uzantısı vardır.
// MVVM Toolkit
Messenger.Send<MyMessage>();
Send<TMessage>(TMessage, object)
işlevine Send<TMessage>(TMessage, object) MVVM Toolkit'in Send<TMessage, TToken>(TMessage, TToken) yöntemiyle ulaşılabilir.
// MvvmLight
Messenger.Default.Send<MyMessage>(new MyMessage(), nameof(MyViewModel));
Messenger.Default.Send(new MyMessage(), nameof(MyViewModel));
// MVVM Toolkit
Messenger.Send(new MyMessage(), nameof(MyViewModel));
Unregister(object)
işlevine Unregister(object) MVVM Toolkit'in UnregisterAll(object) yöntemiyle ulaşılabilir.
// MvvmLight
Messenger.Default.Unregister(this);
// MVVM Toolkit
Messenger.UnregisterAll(this);
Unregister<TMessage>(object)
Unregister<TMessage>(object) işlevselliği, MVVM Toolkit'in IMessenger uzantı yöntemi Unregister<TMessage>(object) ile elde edilebilir.
// MvvmLight
Messenger.Default.Unregister<MyMessage>(this);
// MVVM Toolkit
Messenger.Unregister<MyMessage>(this);
Unregister<TMessage>(object, Action<TMessage>)
MVVM Araç Seti'nde Unregister<TMessage>(object, Action<TMessage>) yönteminin doğrudan bir karşılığı yoktur.
Atlamanın nedeni, ileti alıcısının belirli bir ileti türü için yalnızca tek bir kayıtlı işleyiciye sahip olmasıdır.
MVVM Toolkit'in IMessenger uzantı yöntemiyle Unregister<TMessage>(object)bu işlevi gerçekleştirmenizi öneririz.
// MvvmLight
Messenger.Default.Unregister<MyMessage>(this, OnMyMessageReceived);
// MVVM Toolkit
Messenger.Unregister<MyMessage>(this);
Unregister<TMessage>(object, object)
işlevine Unregister<TMessage>(object, object) MVVM Toolkit'in Unregister<TMessage, TToken>(object, TToken) yöntemiyle ulaşılabilir.
// MvvmLight
Messenger.Default.Unregister<MyMessage>(this, nameof(MyViewModel));
// MVVM Toolkit
Messenger.Unregister<MyMessage, string>(this, nameof(MyViewModel));
Unregister<TMessage>(object, object, Action<TMessage>)
MVVM Araç Seti'nde Unregister<TMessage>(object, object, Action<TMessage>) yönteminin doğrudan bir karşılığı yoktur.
Atlamanın nedeni, ileti alıcısının belirli bir ileti türü için yalnızca tek bir kayıtlı işleyiciye sahip olmasıdır.
MVVM Araç Seti'nin Unregister<TMessage, TToken>(object, TToken) yöntemiyle bu işlevi gerçekleştirmenizi öneririz.
// MvvmLight
Messenger.Default.Unregister<MyMessage>(this, nameof(MyViewModel), OnMyMessageReceived);
// MVVM Toolkit
Messenger.Unregister<MyMessage, string>(this, nameof(MyViewModel));
Cleanup()
Cleanup yönteminin, MVVM Toolkit'te aynı ada sahip doğrudan bir karşılığı vardır. Bu yöntemin yalnızca zayıf başvurular kullanan bir iletici kullanıldığında yararlı olduğunu unutmayın; StrongReferenceMessenger türü için ise, bu yöntem çağrıldığında hiçbir şey olmaz, çünkü iletici kullanılırken iç durum zaten otomatik olarak budanır.
// MvvmLight
Messenger.Default.Cleanup();
// MVVM Toolkit
Messenger.Cleanup();
RequestCleanup()
MVVM Araç Seti'nde RequestCleanup yönteminin doğrudan bir karşılığı yoktur. MvvmLight bağlamında, RequestCleanup uygulama zayıf referanslardan yararlandığı için artık geçerli olmayan kayıtların kaldırılması isteğini başlatmak için kullanılır.
yöntemine yapılan RequestCleanup tüm çağrılar kaldırılabilir veya ile Cleanupdeğiştirilebilir.
// MvvmLight
Messenger.Default.RequestCleanup();
// MVVM Toolkit
// No direct replacement, remove
ResetAll()
işlevine ResetAll() MVVM Toolkit'in Reset() yöntemiyle ulaşılabilir.
MvvmLight'ın örneği null yapan uygulamasının aksine, MVVM Araç Seti kayıtlı eşlemeleri temizler.
// MvvmLight
Messenger.Default.ResetAll();
// MVVM Toolkit
Messenger.Reset();
Messenger statik yöntemleri
OverrideDefault(IMessenger)
MVVM Araç Seti'nde OverrideDefault(IMessenger) yönteminin doğrudan bir karşılığı yoktur.
IMessenger için özel bir uygulama kullanmak üzere, ya özel uygulamayı bağımlılık enjeksiyonu için hizmet kayıtlarına kaydedin ya da statik bir örneği el ile oluşturup gereken yerde bunu iletin.
// MvvmLight
Messenger.OverrideDefault(new Messenger());
// MVVM Toolkit
// No direct replacement
Reset()
MVVM Araç Seti'nde statik Reset yöntemin doğrudan değişimi yoktur.
Aynı işlevsellik, messenger türlerinden birinin statik Default örneğinin Reset yöntemi çağrılarak gerçekleştirilebilir.
// MvvmLight
Messenger.Reset();
// MVVM Toolkit
WeakReferenceMessenger.Default.Reset();
Messenger statik özellikleri
Default
Default için doğrudan yerine geçen bir seçenek olan Default, mevcut uygulamanızda hiçbir değişiklik gerektirmez.
// MvvmLight
IMessenger messenger = Messenger.Default;
// MVVM Toolkit
IMessenger messenger = WeakReferenceMessenger.Default;
İleti türlerini geçirme
MvvmLight araç setinde sağlanan ileti türleri, geliştirici olarak gerekirse birlikte çalışabileceğiniz bir temel olarak tasarlanmıştır.
MVVM Araç Seti bazı alternatifler sağlasa da, bu ileti türleri için doğrudan bir değişiklik yoktur. Kullanılabilir ileti türlerimize bakmanızı öneririz.
Alternatif olarak, çözümünüz MvvmLight ileti türlerinden yararlanıyorsa, bunlar kolayca kendi kod tabanınıza taşınabilir.
Platforma özel bileşenleri taşıma
Geçerli MVVM Araç Seti uygulamasında, MvvmLight araç setinde bulunan platforma özgü bileşenler için hiçbir değişiklik yoktur.
Aşağıdaki bileşenlerin ve ilişkili yardımcılarının/uzantı yöntemlerinin bir değiştirmesi yoktur ve MVVM Araç Seti'ne geçiş yaparken dikkate alınması gerekir.
Android/iOS/Windows’e özgü
DialogServiceDispatcherHelperNavigationService
Android/iOS'a özgü
ActivityBaseBindingBindingModePropertyChangedEventManagerUpdateTriggerMode
Android'e özgü
CachingViewHolderObservableAdapterObservableRecyclerAdapter
iOS'a özgü
ObservableCollectionViewSourceObservableTableViewControllerObservableTableViewSource
Yardımcıları
EmptyWeakActionWeakFunc
MVVM Toolkit