mvvm-lightAan de slag met mvvm-light


Opmerkingen

MVVM-light is een toolkit geschreven in C # die helpt bij het versnellen van het maken en ontwikkelen van MVVM-applicaties in WPF, Silverlight, Windows Store, Windows Phone en Xamarin.

Webpagina: http://www.mvvmlight.net/

Er is een platformoverschrijdend MVVM-monster van de auteur van de bibliotheek, te vinden op https://github.com/lbugnion/sample-crossplatform-flowers

ObservableObject

De klasse ObservableObject bevat enkele nuttige methoden om te helpen met het MVVM-patroon.

De RaisePropertyChanged biedt een veilige compilatiemethode om evenementen met eigenschapsveranderingen te genereren.
Het kan worden opgeroepen met

RaisePropertyChanged(() => MyProperty);
 

De methode Set kan in de eigenschapsetter worden gebruikt om de nieuwe waarde in te stellen en de gebeurtenis eigenschap gewijzigd te verhogen (alleen als er een wijziging is opgetreden). Het retourneert true als er verandering is opgetreden en anders false .
voorbeeld gebruik:

private string _myValue;
public string MyValue    
{
    get { return _myValue; }
    set { Set(ref _myValue, value); }
}
 

RelayCommand

De RelayCommand implementeert de ICommand interface en kan daarom worden gebruikt om te binden aan Command s in XAML (als de eigenschap Command van het Button element)

De constructor neemt twee argumenten; de eerste is een Action die wordt uitgevoerd als ICommand.Execute wordt aangeroepen (bijv. de gebruiker klikt op de knop), de tweede is een Func<bool> die bepaalt of de actie kan worden uitgevoerd (standaard ingesteld op true, canExecute in de volgende paragraaf).

de basisstructuur is als volgt:

public ICommand MyCommand => new RelayCommand(
    () =>
    {
        //execute action
        Message = "clicked Button";
    },
    () =>
    {
        //return true if button should be enabled or not
        return true;
    }
);
 

Enkele opmerkelijke effecten:

  • Als canExecute false retourneert, wordt de Button uitgeschakeld voor de gebruiker
  • Voordat de actie echt wordt uitgevoerd, wordt canExecute opnieuw gecontroleerd
  • U kunt MyCommand.RaiseCanExecuteChanged(); aanroepen MyCommand.RaiseCanExecuteChanged(); om de herwaardering van de canExecute Func canExecute

RelayCommand

De RelayCommand<T> is vergelijkbaar met de RelayCommand , maar maakt het mogelijk om een object direct door te geven aan de opdracht. Het implementeert de ICommand interface en kan daarom worden gebruikt om te binden aan Command 's in XAML (bijvoorbeeld als de eigenschap Command van het Button element). U kunt vervolgens de eigenschap CommandParameter gebruiken om het object aan de opdracht door te geven.

XAML-voorbeeld:

<Button Command="{Binding MyCommand}" CommandParameter="{Binding MyModel}" />
 

De constructor neemt twee argumenten; de eerste is een actie die wordt uitgevoerd als ICommand.Execute wordt aangeroepen (bijv. de gebruiker klikt op de knop), de tweede is een Func <string, bool> die bepaalt of de actie kan worden uitgevoerd (standaard ingesteld op true, genaamd canExecute in de volgende paragraaf). de basisstructuur is als volgt:

public RelayCommand<string> MyCommand => new RelayCommand<string>(
    obj =>
    {
        //execute action
        Message = obj;
    },
    obj =>
    {
        //return true if button should be enabled or not
        return obj != "allowed";
    }
);
 

Enkele opmerkelijke effecten:

  • Als canExecute false retourneert, wordt de Button uitgeschakeld voor de gebruiker
  • Voordat de actie echt wordt uitgevoerd, wordt canExecute opnieuw gecontroleerd
  • U kunt MyCommand.RaiseCanExecuteChanged(); aanroepen MyCommand.RaiseCanExecuteChanged(); om de herwaardering van de canExecute Func canExecute

ViewModelBase

ViewModelBase breidt ObservableObject en voegt enkele methoden toe die nuttig zijn voor viewmodellen.

Met de eigenschap IsInDesignMode of IsInDesignModeStatic kunt u bepalen of de code wordt uitgevoerd in de ontwerpmodus (in Visual Studio Design View) of niet. De twee eigenschappen zijn exact hetzelfde.