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:, , , RelayCommandRelayCommand<T>AsyncRelayCommand, , AsyncRelayCommand<T>, IMessenger, WeakReferenceMessenger, StrongReferenceMessenger, , IRecipient<TMessage>, MessageHandler<TRecipient, TMessage>ObservableRecipientObservableObjectIMessengerExtensions

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();

SetPropertyStejně 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 ObservableRecipientIsActive 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 (WeakReferenceMessengera StrongReferenceMessengerviz 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, Defaultkterá 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