Migrace z MvvmLight
Tento článek popisuje některé klíčové rozdíly mezi MvvmLight Toolkit a MVVM Toolkit pro usnadnění migrace.
Přestože se tento článek konkrétně zaměřuje na migrace mvvmLight na MVVM Toolkit, mějte na paměti, že existují další vylepšení, která byla provedena v MVVM Toolkit, takže důrazně doporučujeme podívat se na dokumentaci pro jednotlivá nová rozhraní API.
Rozhraní API platformy:, , ,
RelayCommand
RelayCommand<T>
AsyncRelayCommand
, ,AsyncRelayCommand<T>
,IMessenger
,WeakReferenceMessenger
,StrongReferenceMessenger
, ,IRecipient<TMessage>
,MessageHandler<TRecipient, TMessage>
ObservableRecipient
ObservableObject
IMessengerExtensions
Instalace sady nástrojů MVVM
Pokud chcete využít MVVM Toolkit, musíte nejprve do stávající aplikace .NET nainstalovat nejnovější balíček NuGet.
Instalace přes .NET CLI
dotnet add package CommunityToolkit.Mvvm --version 8.1.0
Instalace prostřednictvím PackageReference
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.1.0" />
Migrace observableObjectu
Následující kroky se zaměřují na migraci stávajících komponent, které využívají ObservableObject
MvvmLight Toolkit. Sada nástrojů MVVM poskytuje ObservableObject
podobný typ.
První změna zde bude prohodit direktivy using ve vašich komponentách.
// MvvmLight
using GalaSoft.MvvmLight;
// MVVM Toolkit
using CommunityToolkit.Mvvm.ComponentModel;
Níže je seznam migrací, které je potřeba provést, pokud se budou používat v aktuálním řešení.
Metody ObservableObject
Set<T>(Expression, ref T, T)
Set(Expression, ref T, T)
nemá nahrazování podpisu podobné metody.
SetProperty(ref T, T, string)
Poskytuje ale stejné funkce s dalšími výhodami výkonu.
// MvvmLight
Set(() => MyProperty, ref this.myProperty, value);
// MVVM Toolkit
SetProperty(ref this.myProperty, value);
Všimněte si, že string
parametr není vyžadován, pokud metoda je volána ze setter vlastnosti, protože je odvozena z názvu člena volajícího, jak je vidět zde. Pokud chcete vyvolat SetProperty
vlastnost, která se liší od vlastnosti, ve které je vyvolána metoda, můžete to provést pomocí operátoru nameof
, což může být užitečné, aby kód méně náchylný k chybám tím, že nemá pevně zakódované názvy. Například:
SetProperty(ref this.someProperty, value, nameof(SomeProperty));
Set<T>(string, ref T, T)
Set<T>(string, ref T, T)
nemá nahrazování podpisu podobné metody.
SetProperty<T>(ref T, T, string)
Poskytuje ale stejné funkce s přeřazenými parametry.
// 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)
má přejmenovánou přímou náhradu, SetProperty<T>(ref T, T, string)
.
// MvvmLight
Set(ref this.myProperty, value, nameof(MyProperty));
// MVVM Toolkit
SetProperty(ref this.myProperty, value);
RaisePropertyChanged(string)
RaisePropertyChanged(string)
má přejmenovánou přímou náhradu, OnPropertyChanged(string)
.
// MvvmLight
RaisePropertyChanged(nameof(MyProperty));
// MVVM Toolkit
OnPropertyChanged();
SetProperty
Stejně jako u , název aktuální vlastnosti je automaticky odvozen metodouOnPropertyChanged
. Pokud chcete tuto metodu PropertyChanged
použít k ručnímu vyvolání události pro jinou vlastnost, můžete také ručně zadat název této vlastnosti pomocí operátoru nameof
znovu. Například:
OnPropertyChanged(nameof(SomeProperty));
RaisePropertyChanged<T>(Expression)
RaisePropertyChanged<T>(Expression)
nemá přímou náhradu.
Doporučuje se pro zvýšení výkonu, který nahrazujete RaisePropertyChanged<T>(Expression)
sadou Nástrojů OnPropertyChanged(string)
místo nameof
toho klíčové slovo (nebo bez parametrů, pokud cílová vlastnost je stejná jako cílová vlastnost volající metodu, takže název může být odvozen automaticky, jak je uvedeno výše).
// MvvmLight
RaisePropertyChanged(() => MyProperty);
// MVVM Toolkit
OnPropertyChanged(nameof(MyProperty));
VerifyPropertyName(string)
Neexistuje žádná přímá náhrada metody VerifyPropertyName(string)
a jakýkoli kód, který by tento kód měl být změněn nebo odebrán.
Důvodem vynechání sady nástrojů MVVM je, že použití klíčového nameof
slova pro vlastnost ověří, že existuje. Když byl vytvořen MvvmLight, nameof
klíčové slovo nebylo k dispozici a tato metoda byla použita k zajištění, že vlastnost existovala na objektu.
// MvvmLight
VerifyPropertyName(nameof(MyProperty));
// MVVM Toolkit
// No direct replacement, remove
ObservableObject – vlastnosti
PropertyChangedHandler
PropertyChangedHandler
nemá přímou náhradu.
Chcete-li vyvolat událost změny vlastnosti prostřednictvím PropertyChanged
obslužné rutiny události, musíte místo toho volat metodu OnPropertyChanged
.
// MvvmLight
PropertyChangedEventHandler handler = PropertyChangedHandler;
// MVVM Toolkit
OnPropertyChanged();
Migrace ViewModelBase
Následující kroky se zaměřují na migraci stávajících komponent, které využívají ViewModelBase
MvvmLight Toolkit.
Sada nástrojů MVVM poskytuje ObservableRecipient
typ, který poskytuje podobné funkce.
Níže je seznam migrací, které je potřeba provést, pokud se budou používat v aktuálním řešení.
Metody ViewModelBase
Set<T>(string, ref T, T, bool)
Set<T>(string, ref T, T, bool)
nemá nahrazování podpisu podobné metody.
SetProperty<T>(ref T, T, bool, string)
Poskytuje ale stejné funkce s přeřazenými parametry.
// MvvmLight
Set(nameof(MyProperty), ref this.myProperty, value, true);
// MVVM Toolkit
SetProperty(ref this.myProperty, value, true);
Všimněte si, že v implementaci MVVM Toolkit nejsou volitelné hodnoty a logické parametry všesměrového vysílání a musí být k použití této metody k dispozici. Důvodem této změny je, že vynecháním parametru všesměrového vysílání při volání této metody bude ve výchozím nastavení volat ObservableObject SetProperty
metoda.
Parametr také není vyžadován, string
pokud metoda je volána ze setter vlastnosti, protože je odvozena z názvu člena volajícího, stejně jako metody v základní ObservableObject
třídě.
Set<T>(ref T, T, bool, string)
Set<T>(ref T, T, bool, string)
má přejmenovánou přímou náhradu, SetProperty<T>(ref T, T, bool, string)
.
// 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)
nemá přímou náhradu.
Doporučuje se, abyste tento výkon nahradili sadou nástrojů MVVM SetProperty<T>(ref T, T, bool, string)
pomocí klíčového nameof
slova.
// 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)
má přímé nahrazení, které nevyžaduje přejmenování.
// MvvmLight
Broadcast<MyObject>(oldValue, newValue, nameof(MyProperty));
// MVVM Toolkit
Broadcast(oldValue, newValue, nameof(MyProperty));
Poznámka: Zpráva odeslaná prostřednictvím Messenger
vlastnosti při volání Broadcast
metody má přímou náhradu PropertyChangedMessage
za knihovnu MVVM Toolkit.
RaisePropertyChanged<T>(string, T, T, bool)
Pro metodu RaisePropertyChanged<T>(string, T, T, bool)
neexistuje přímá náhrada.
Nejjednodušší alternativou je volání OnPropertyChanged
a následné volání Broadcast
k dosažení této funkce.
// MvvmLight
RaisePropertyChanged<MyObject>(nameof(MyProperty), oldValue, newValue, true);
// MVVM Toolkit
OnPropertyChanged();
Broadcast(oldValue, newValue, nameof(MyProperty));
RaisePropertyChanged<T>(Expression, T, T, bool)
Pro metodu RaisePropertyChanged<T>(Expression, T, T, bool)
neexistuje přímá náhrada.
Nejjednodušší alternativou je volání OnPropertyChanged
a následné volání Broadcast
k dosažení této funkce.
// MvvmLight
RaisePropertyChanged<MyObject>(() => MyProperty, oldValue, newValue, true);
// MVVM Toolkit
OnPropertyChanged(nameof(MyProperty));
Broadcast(oldValue, newValue, nameof(MyProperty));
ICleanup.Cleanup()
Rozhraní nemá přímou náhradu ICleanup
.
Poskytuje však metoduOnDeactivated
, ObservableRecipient
která by měla být použita k poskytování stejné funkce jako Cleanup
.
OnDeactivated
V MVVM Toolkit také zruší registraci všech registrovaných událostí messengeru při zavolání.
// MvvmLight
Cleanup();
// MVVM Toolkit
OnDeactivated();
Všimněte si, že OnActivated
metody a OnDeactivated
metody lze volat z existujícího řešení jako v případě Cleanup
.
Zveřejňuje ObservableRecipient
IsActive
však vlastnost, která také řídí volání těchto metod při jeho nastavení.
ViewModelBase – vlastnosti
MessengerInstance
MessengerInstance
má přejmenovánou přímou náhradu, Messenger
.
// MvvmLight
IMessenger messenger = MessengerInstance;
// MVVM Toolkit
IMessenger messenger = Messenger;
Poznámka:
Výchozí hodnota Messenger
vlastnosti bude WeakReferenceMessenger.Default
instance, což je standardní slabá referenční messenger implementace v MVVM Toolkit. To lze přizpůsobit pouhým vložením jiné IMessenger
instance do konstruktoru ObservableRecipient
.
IsInDesignMode
Neexistuje žádná přímá náhrada vlastnosti IsInDesignMode
a veškerý kód, který by tento kód měl být změněn nebo odebrán.
Důvodem vynechání ze sady nástrojů MVVM je to, že IsInDesignMode
vlastnost vystavená implementacím specifických pro platformu. Sada nástrojů MVVM byla navržena tak, aby byla nezávislá na platformě.
// MvvmLight
var isInDesignMode = IsInDesignMode;
// MVVM Toolkit
// No direct replacement, remove
Statické vlastnosti ViewModelBase
IsInDesignModeStatic
Neexistuje žádná přímá náhrada vlastnosti IsInDesignModeStatic
a veškerý kód, který by tento kód měl být změněn nebo odebrán.
Důvodem vynechání ze sady nástrojů MVVM je to, že IsInDesignMode
vlastnost vystavená implementacím specifických pro platformu. Sada nástrojů MVVM byla navržena tak, aby byla nezávislá na platformě.
// MvvmLight
var isInDesignMode = ViewModelBase.IsInDesignModeStatic;
// MVVM Toolkit
// No direct replacement, remove
Migrace relaycommand
Následující kroky se zaměřují na migraci stávajících komponent, které využívají RelayCommand
MvvmLight Toolkit.
Sada nástrojů MVVM poskytuje RelayCommand
typ, který poskytuje podobné funkce, které využívají ICommand
systémové rozhraní.
Níže je seznam migrací, které je potřeba provést, pokud se budou používat v aktuálním řešení. Pokud není uvedená metoda nebo vlastnost, existuje přímá náhrada se stejným názvem v MVVM Toolkit a nevyžaduje se žádná změna.
První změna zde bude prohodit direktivy using ve vašich komponentách.
// MvvmLight
using GalaSoft.MvvmLight.Command;
using Galasoft.MvvmLight.CommandWpf;
// MVVM Toolkit
using CommunityToolkit.Mvvm.Input;
Poznámka:
MvvmLight používá slabé odkazy k navázání propojení mezi příkazem a akcí volanou z přidružené třídy. To není vyžadováno implementací MVVM Toolkit a pokud byl tento volitelný parametr nastaven v true
některém z vašich konstruktorů, odebere se.
Použití RelayCommand s asynchronními akcemi
Pokud aktuálně používáte implementaci MvvmLight RelayCommand
s asynchronními akcemi, sada MVVM Toolkit zveřejňuje vylepšenou implementaci pro tyto scénáře.
Můžete jednoduše nahradit existující RelayCommand
tím AsyncRelayCommand
, který byl vytvořen pro asynchronní účely.
// MvvmLight
var command = new RelayCommand(() => OnCommandAsync());
var command = new RelayCommand(async () => await OnCommandAsync());
// MVVM Toolkit
var asyncCommand = new AsyncRelayCommand(OnCommandAsync);
Metody RelayCommand
RaiseCanExecuteChanged()
Funkce RaiseCanExecuteChanged()
lze dosáhnout pomocí metody MVVM Toolkit NotifyCanExecuteChanged()
.
// MvvmLight
var command = new RelayCommand(OnCommand);
command.RaiseCanExecuteChanged();
// MVVM Toolkit
var command = new RelayCommand(OnCommand);
command.NotifyCanExecuteChanged();
Migrace RelayCommand<T>
Následující kroky se zaměřují na migraci stávajících komponent, které využívají RelayCommand<T>
MvvmLight Toolkit.
Sada nástrojů MVVM poskytuje RelayCommand<T>
typ, který poskytuje podobné funkce, které využívají ICommand
systémové rozhraní.
Níže je seznam migrací, které je potřeba provést, pokud se budou používat v aktuálním řešení. Pokud není uvedená metoda nebo vlastnost, existuje přímá náhrada se stejným názvem v MVVM Toolkit a nevyžaduje se žádná změna.
První změna zde bude prohodit direktivy using ve vašich komponentách.
// MvvmLight
using GalaSoft.MvvmLight.Command;
using Galasoft.MvvmLight.CommandWpf;
// MVVM Toolkit
using CommunityToolkit.Mvvm.Input;
Použití RelayCommand
s asynchronními akcemi
Pokud aktuálně používáte implementaci MvvmLight RelayCommand<T>
s asynchronními akcemi, sada MVVM Toolkit zveřejňuje vylepšenou implementaci pro tyto scénáře.
Můžete jednoduše nahradit existující RelayCommand<T>
tím AsyncRelayCommand<T>
, který byl vytvořen pro asynchronní účely.
// MvvmLight
var command = new RelayCommand<string>(async () => await OnCommandAsync());
// MVVM Toolkit
var asyncCommand = new AsyncRelayCommand<string>(OnCommandAsync);
RelayCommand<T>
Metody
RaiseCanExecuteChanged()
Funkce RaiseCanExecuteChanged()
lze dosáhnout pomocí metody MVVM Toolkit NotifyCanExecuteChanged()
.
// MvvmLight
var command = new RelayCommand<string>(OnCommand);
command.RaiseCanExecuteChanged();
// MVVM Toolkit
var command = new RelayCommand<string>(OnCommand);
command.NotifyCanExecuteChanged();
Migrace SimpleIoc
Implementace IoC v sadě nástrojů MVVM neobsahuje žádnou integrovanou logiku pro zpracování injektáže závislostí, takže k načtení IServiceProvider
instance, kterou můžete předat metodě, můžete použít libovolnou knihovnu Ioc.ConfigureServices
třetí strany. V následujících ServiceCollection
příkladech se použije typ z Microsoft.Extensions.DependencyInjection
knihovny.
Toto je největší změna mezi MvvmLight a MVVM Toolkit.
Tato implementace bude povědomá, pokud jste implementovali injektáž závislostí s aplikacemi ASP.NET Core.
Registrace závislostí
Pomocí MvvmLight jste možná zaregistrovali závislosti podobné těmto scénářům pomocí SimpleIoc
.
public void RegisterServices()
{
SimpleIoc.Default.Register<INavigationService, NavigationService>();
SimpleIoc.Default.Register<IDialogService>(() => new DialogService());
}
S MVVM Toolkit byste dosáhli stejného, jak je znázorněno níže.
public void RegisterServices()
{
Ioc.Default.ConfigureServices(
new ServiceCollection()
.AddSingleton<INavigationService, NavigationService>()
.AddSingleton<IDialogService>(new DialogService())
.BuildServiceProvider());
}
Řešení závislostí
Po inicializaci je možné služby načíst z Ioc
třídy stejně jako pomocí SimpleIoc
:
IDialogService dialogService = SimpleIoc.Default.GetInstance<IDialogService>();
Migrace na MVVM Toolkit dosáhnete stejného:
IDialogService dialogService = Ioc.Default.GetService<IDialogService>();
Odstranění závislostí
V případě SimpleIoc
, že zrušíte registraci závislostí pomocí následujícího volání metody.
SimpleIoc.Default.Unregister<INavigationService>();
Neexistuje přímá náhrada za odebrání závislostí s implementací MVVM Toolkit Ioc
.
Upřednostňovaný konstruktor
Při registraci závislostí pomocí MvvmLight ' s SimpleIoc
, máte možnost ve třídách poskytnout PreferredConstructor
atribut pro ty s více konstruktory.
Tento atribut bude potřebovat odebrání místa použití a v případě podpory budete muset použít všechny atributy z knihovny injektáže závislostí třetí strany.
Migrace Messenger
Následující kroky se zaměřují na migraci stávajících komponent, které využívají Messenger
MvvmLight Toolkit.
Sada MVVM Toolkit poskytuje dvě implementace messengeru (WeakReferenceMessenger
a StrongReferenceMessenger
viz dokumentaci zde), která poskytuje podobné funkce, s některými klíčovými rozdíly podrobně popsanými níže.
Níže je seznam migrací, které je potřeba provést, pokud se budou používat v aktuálním řešení.
První změna zde bude prohodit direktivy using ve vašich komponentách.
// MvvmLight
using GalaSoft.MvvmLight.Messaging;
// MVVM Toolkit
using CommunityToolkit.Mvvm.Messaging;
Metody Messenger
Register<TMessage>(object, Action<TMessage>)
Funkce Register<TMessage>(object, Action<TMessage>)
lze dosáhnout pomocí rozšiřující metody Register<TRecipient, TMessage>(object, MessageHandler<TRecipient, TMessage>)
MVVM Toolkit IMessenger
.
// MvvmLight
Messenger.Default.Register<MyMessage>(this, this.OnMyMessageReceived);
// MVVM Toolkit
Messenger.Register<MyViewModel, MyMessage>(this, static (r, m) => r.OnMyMessageReceived(m));
Důvodem tohoto podpisu je, že messenger umožňuje používat slabé odkazy ke správnému sledování příjemců a vyhnout se vytváření uzavření pro zachycení samotného příjemce. To znamená, že příjemce vstupu se předá jako vstup výrazu lambda, takže ho samotný výraz lambda nemusí zachytit. Výsledkem je také efektivnější kód, protože stejná obslužná rutina se dá opakovaně použít bez přidělení. Všimněte si, že je to jen jeden z podporovaných způsobů registrace obslužných rutin a je možné místo toho použít IRecipient<TMessage>
rozhraní (podrobně popsané v messenger docs), což umožňuje registraci automaticky a méně podrobné.
Poznámka:
static
Modifikátor výrazů lambda vyžaduje jazyk C# 9 a je volitelný. Je užitečné ho použít zde, abyste zajistili, že nechtěně nezachytíte příjemce nebo některého jiného člena, a proto způsobuje přidělení uzavření, ale není povinné. Pokud nemůžete použít C# 9, stačí ho odebrat static
a jen buďte opatrní, abyste zajistili, že kód nic nezachytí.
Kromě toho tento příklad a níže uvedené budou pouze používat Messenger
vlastnost z ObservableRecipient
. Pokud chcete pouze staticky přistupovat k instanci messengeru odkudkoli jinde v kódu, platí i stejné příklady, přičemž jediným rozdílem je, že Messenger
je třeba nahradit např. WeakReferenceMessenger.Default
Místo toho.
Register<TMessage>(object, bool, Action<TMessage>)
Pro tento registrační mechanismus neexistuje přímá náhrada, která umožňuje podporovat příjem zpráv pro odvozené typy zpráv. Tato změna je záměrná, protože Messenger
cílem implementace není použít reflexi k dosažení jeho výkonnostních výhod.
K dosažení této funkce můžete také použít několik možností.
- Vytvořte vlastní
IMessenger
implementaci. - Zaregistrujte další typy zpráv pomocí sdílené obslužné rutiny, než pak zkontroluje typ a vyvolá správnou metodu.
// 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>)
Funkce Register<TMessage>(object, object, Action<TMessage>)
lze dosáhnout pomocí metody MVVM Toolkit Register<TRecipient, TMessage, TToken>(object, TToken, MessageHandler<TRecipient, TMessage>)
.
// 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>)
Pro tento registrační mechanismus neexistuje přímá náhrada, která umožňuje podporovat příjem zpráv pro odvozené typy zpráv. Tato změna je záměrná, protože Messenger
cílem implementace není použít reflexi k dosažení jeho výkonnostních výhod.
K dosažení této funkce můžete také použít několik možností.
- Vytvořte vlastní
IMessenger
implementaci. - Zaregistrujte další typy zpráv pomocí sdílené obslužné rutiny, než pak zkontroluje typ a vyvolá správnou metodu.
// 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)
Funkce Send<TMessage>(TMessage)
lze dosáhnout pomocí rozšiřující metody Send<TMessage>(TMessage)
MVVM Toolkit IMessenger
.
// MvvmLight
Messenger.Default.Send<MyMessage>(new MyMessage());
Messenger.Default.Send(new MyMessage());
// MVVM Toolkit
Messenger.Send(new MyMessage());
Ve výše uvedeném scénáři, ve kterém má odesílaná zpráva konstruktor bez parametrů, má MVVM Toolkit zjednodušené rozšíření pro odeslání zprávy v tomto formátu.
// MVVM Toolkit
Messenger.Send<MyMessage>();
Send<TMessage>(TMessage, object)
Funkce Send<TMessage>(TMessage, object)
lze dosáhnout pomocí metody MVVM Toolkit Send<TMessage, TToken>(TMessage, TToken)
.
// 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)
Funkce Unregister(object)
lze dosáhnout pomocí metody MVVM Toolkit UnregisterAll(object)
.
// MvvmLight
Messenger.Default.Unregister(this);
// MVVM Toolkit
Messenger.UnregisterAll(this);
Unregister<TMessage>(object)
Funkce Unregister<TMessage>(object)
lze dosáhnout pomocí rozšiřující metody Unregister<TMessage>(object)
MVVM Toolkit IMessenger
.
// MvvmLight
Messenger.Default.Unregister<MyMessage>(this);
// MVVM Toolkit
Messenger.Unregister<MyMessage>(this);
Unregister<TMessage>(object, Action<TMessage>)
V sadě nástrojů MVVM neexistuje přímá náhrada Unregister<TMessage>(object, Action<TMessage>)
metody.
Důvodem pro vynechání je, že příjemce zprávy může mít pouze jednu registrovanou obslužnou rutinu pro libovolný daný typ zprávy.
Tuto funkci doporučujeme dosáhnout pomocí metody Unregister<TMessage>(object)
rozšíření MVVM Toolkit IMessenger
.
// MvvmLight
Messenger.Default.Unregister<MyMessage>(this, OnMyMessageReceived);
// MVVM Toolkit
Messenger.Unregister<MyMessage>(this);
Unregister<TMessage>(object, object)
Funkce Unregister<TMessage>(object, object)
lze dosáhnout pomocí metody MVVM Toolkit Unregister<TMessage, TToken>(object, TToken)
.
// MvvmLight
Messenger.Default.Unregister<MyMessage>(this, nameof(MyViewModel));
// MVVM Toolkit
Messenger.Unregister<MyMessage, string>(this, nameof(MyViewModel));
Unregister<TMessage>(object, object, Action<TMessage>)
V sadě nástrojů MVVM neexistuje přímá náhrada Unregister<TMessage>(object, object, Action<TMessage>)
metody.
Důvodem pro vynechání je, že příjemce zprávy může mít pouze jednu registrovanou obslužnou rutinu pro libovolný daný typ zprávy.
Tuto funkci doporučujeme dosáhnout pomocí metody MVVM Toolkit Unregister<TMessage, TToken>(object, TToken)
.
// MvvmLight
Messenger.Default.Unregister<MyMessage>(this, nameof(MyViewModel), OnMyMessageReceived);
// MVVM Toolkit
Messenger.Unregister<MyMessage, string>(this, nameof(MyViewModel));
Cleanup()
Metoda Cleanup
má přímé nahrazení stejným názvem v MVVM Toolkit. Všimněte si, že tato metoda je užitečná pouze v případě, že se používá messenger používající slabé odkazy, zatímco StrongReferenceMessenger
typ jednoduše udělá nic, když je volána tato metoda, protože vnitřní stav je již oříznut automaticky, protože messenger je používán.
// MvvmLight
Messenger.Default.Cleanup();
// MVVM Toolkit
Messenger.Cleanup();
RequestCleanup()
V sadě nástrojů MVVM neexistuje přímá náhrada RequestCleanup
metody. V kontextu MvvmLight se používá k zahájení žádosti o odebrání registrací, které již nejsou aktivní, RequestCleanup
protože implementace využívá slabé odkazy.
Všechna volání metody RequestCleanup
lze odebrat nebo nahradit .Cleanup
// MvvmLight
Messenger.Default.RequestCleanup();
// MVVM Toolkit
// No direct replacement, remove
ResetAll()
Funkce ResetAll()
lze dosáhnout pomocí metody MVVM Toolkit Reset()
.
Na rozdíl od implementace MvvmLight, která instanci nulls, MVVM Toolkit vymaže registrované mapy.
// MvvmLight
Messenger.Default.ResetAll();
// MVVM Toolkit
Messenger.Reset();
Statické metody Messengeru
OverrideDefault(IMessenger)
V sadě nástrojů MVVM neexistuje přímá náhrada OverrideDefault(IMessenger)
metody.
Chcete-li použít vlastní implementaci IMessenger
, buď zaregistrována vlastní implementace v registracích služby pro injektáž závislostí, nebo ručně vytvořit statickou instanci a předat ji tam, kde je to potřeba.
// MvvmLight
Messenger.OverrideDefault(new Messenger());
// MVVM Toolkit
// No direct replacement
Reset()
V sadě nástrojů MVVM neexistuje přímá náhrada statické Reset
metody.
Stejné funkce lze dosáhnout voláním Reset
metody statické Default
instance jednoho z typů messenger.
// MvvmLight
Messenger.Reset();
// MVVM Toolkit
WeakReferenceMessenger.Default.Reset();
Statické vlastnosti messengeru
Default
Default
má přímou náhradu, Default
která nevyžaduje žádnou změnu stávající implementace.
// MvvmLight
IMessenger messenger = Messenger.Default;
// MVVM Toolkit
IMessenger messenger = WeakReferenceMessenger.Default;
Migrace typů zpráv
Typy zpráv poskytované v sadě nástrojů MvvmLight jsou navržené jako základ pro vás jako vývojář, který v případě potřeby pracuje.
I když sada nástrojů MVVM poskytuje některé alternativy, neexistuje přímá náhrada těchto typů zpráv. Doporučujeme se podívat na dostupné typy zpráv.
Pokud vaše řešení využívá typy zpráv MvvmLight, můžete je snadno přenést do vlastního základu kódu.
Migrace komponent specifických pro platformu
V současné implementaci MVVM Toolkit neexistují žádné náhrady za komponenty specifické pro platformu, které existují v sadě nástrojů MvvmLight.
Následující komponenty a jejich přidružené pomocné a rozšiřující metody nemají náhradu a budou muset zvážit při migraci na MVVM Toolkit.
Specifické pro Android, iOS nebo Windows
DialogService
DispatcherHelper
NavigationService
Specifické pro Android nebo iOS
ActivityBase
Binding
BindingMode
PropertyChangedEventManager
UpdateTriggerMode
Specifické pro Android
CachingViewHolder
ObservableAdapter
ObservableRecyclerAdapter
Specifické pro iOS
ObservableCollectionViewSource
ObservableTableViewController
ObservableTableViewSource
Pomocníci
Empty
WeakAction
WeakFunc