Das ViewModel bildet die Logik hinter der View (Benutzerinterface). Folgend findest du ein kleines Beispiel, wie du ein ViewModel aufbauen kannst, so dass es dem MVVM-Designmuster entspricht.
ViewModelBase
Es empfiehlt sich, eine Basis-Klasse für deine ViewModel’s zu erstellen. So kann jedes weitere ViewModel von dieser Klasse erben. Die Basis-Klasse kann wie folgt aussehen und nach belieben erweitert oder angepasst werden.
public abstract class ViewModelBase : INotifyPropertyChanged { #region OnPropertyChanged public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } protected bool SetValue<T>(ref T backingField, T value, [CallerMemberName] string propertyName = "") { if (object.Equals(backingField, value)) { return false; } backingField = value; this.OnPropertyChanged(propertyName); return true; } #endregion #region GlobalProperties bool _isLoading = false; public bool IsLoading { get => _isLicenseValid; set => SetValue(ref _isLoading, value); } #endregion }
Das spätere ViewModel kann dann die Eigenschaften und Funktionen erben und auf diese zugreifen.
public class AboutViewModel : ViewModelBase { #region Properties bool _updateAvailable; public bool UpdateAvailable { get => _updateAvailable; set { if (value == _updateAvailable) return; _updateAvailable = value; OnPropertyChanged(); } } #endregion #region Constructor public AboutViewModel() { LoadSettings(); } void LoadSettings() { UpdateAvailable = false; } #endregion #region Commands & Actions public ICommand CheckForUpdatesCommand { get { return new RelayCommand(async(p) => await CheckForUpdatesAction()); } } async Task CheckForUpdatesAction() { await CheckForUpdates(); } #endregion #region Methods async Task CheckForUpdates() { // Perform some tasks... } #endregion }