Zuletzt aktualisiert am 04.12.2025 7 Minuten Lesezeit

MVVM

MVVM (Model-View-ViewModel) ist ein Architekturmuster zur Trennung von Benutzeroberfläche und Logik, das bidirektionales Data Binding nutzt.

MVVM (Model-View-ViewModel) ist ein Architekturmuster in der Softwareentwicklung, das speziell für die Entwicklung von Benutzeroberflächen konzipiert wurde. Es trennt die Darstellung (View) von der Geschäftslogik (Model) durch eine Zwischenschicht, das sogenannte ViewModel. Die Besonderheit von MVVM liegt im bidirektionalen Data Binding: Änderungen im ViewModel werden automatisch in der View sichtbar und umgekehrt.

Geschichte und Entwicklung

Das MVVM-Muster wurde 2005 von Microsoft-Architekten Ken Cooper und Ted Peters entwickelt. Es entstand im Kontext der Windows Presentation Foundation (WPF), einem Framework für die Entwicklung von Desktop-Anwendungen unter Windows. John Gossman, ein weiterer Microsoft-Architekt, machte das Pattern durch seinen Blog bekannt und prägte den Begriff MVVM.

MVVM ist eine Weiterentwicklung des MVC-Patterns (Model-View-Controller) und basiert auf Martin Fowlers Presentation Model. Der entscheidende Unterschied zu MVC liegt in der Art, wie View und Logik kommunizieren: Während MVC einen Controller als Vermittler nutzt, setzt MVVM auf automatisches Data Binding zwischen View und ViewModel.

Die drei Komponenten von MVVM

MVVM folgt dem Prinzip der Separation of Concerns (Trennung der Zuständigkeiten). Jede der drei Komponenten hat eine klar definierte Aufgabe, wodurch der Code wartbar, testbar und wiederverwendbar wird.

Model

Das Model repräsentiert die Geschäftslogik und die Daten deiner Anwendung. Es enthält Klassen, die deine Domänenobjekte abbilden, sowie Dienste für Datenbankzugriffe oder API-Aufrufe. Das Model hat keine Kenntnis von der Benutzeroberfläche oder dem ViewModel.

  • Enthält Geschäftslogik und Validierungsregeln
  • Verwaltet Daten und deren Persistenz
  • Kommuniziert mit Datenbanken, APIs oder anderen Datenquellen
  • Ist vollständig unabhängig von der UI

View

Die View ist die sichtbare Benutzeroberfläche. In WPF-Anwendungen wird sie typischerweise in XAML (Extensible Application Markup Language) definiert. Die View enthält keine Geschäftslogik, sondern nur Darstellungslogik. Sie bindet sich über Data Binding an das ViewModel und reagiert automatisch auf Datenänderungen.

  • Definiert das Layout und die visuelle Darstellung
  • Bindet UI-Elemente an Properties des ViewModels
  • Enthält minimalen oder keinen Code-Behind
  • Reagiert automatisch auf Änderungen im ViewModel

ViewModel

Das ViewModel ist das Herzstück des MVVM-Patterns. Es fungiert als Bindeglied zwischen Model und View, ohne dabei direkt auf die View zuzugreifen. Das ViewModel stellt öffentliche Properties bereit, an die sich die View binden kann. Bei Änderungen an diesen Properties benachrichtigt das ViewModel die View über das Observer-Pattern, typischerweise durch Implementierung von INotifyPropertyChanged.

  • Exponiert Daten des Models als Properties für die View
  • Implementiert Commands für Benutzerinteraktionen
  • Enthält keine direkte Referenz zur View
  • Benachrichtigt die View bei Datenänderungen (Property Change Notification)

Funktionsweise und Data Binding

Der zentrale Mechanismus in MVVM ist das bidirektionale Data Binding. Die View ist deklarativ an das ViewModel gebunden. Wenn ein Benutzer einen Wert in einem Textfeld ändert, wird diese Änderung automatisch im ViewModel reflektiert. Umgekehrt aktualisiert sich die View automatisch, wenn sich eine Property im ViewModel ändert.

Dieser automatische Synchronisationsmechanismus eliminiert einen Großteil des manuellen Codes, der sonst für die UI-Aktualisierung notwendig wäre. Das ViewModel muss dafür das Observer-Pattern implementieren, üblicherweise durch das Interface INotifyPropertyChanged:

// ViewModel mit Property Change Notification
public class PersonViewModel : INotifyPropertyChanged
{
    private string _name;

    public string Name
    {
        get => _name;
        set
        {
            if (_name != value)
            {
                _name = value;
                OnPropertyChanged(nameof(Name));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

Commands für Benutzerinteraktionen

Neben Properties stellt das ViewModel auch Commands bereit, die Benutzeraktionen wie Buttonklicks oder Menüauswahlen behandeln. In WPF und ähnlichen Frameworks implementieren Commands das ICommand-Interface. Die View bindet Buttons oder andere interaktive Elemente an diese Commands, ohne direkten Code-Behind zu benötigen.

// RelayCommand als wiederverwendbare ICommand-Implementierung
public class RelayCommand : ICommand
{
    private readonly Action _execute;
    private readonly Func<bool> _canExecute;

    public RelayCommand(Action execute, Func<bool> canExecute = null)
    {
        _execute = execute;
        _canExecute = canExecute;
    }

    public bool CanExecute(object parameter) => _canExecute?.Invoke() ?? true;
    public void Execute(object parameter) => _execute();

    public event EventHandler CanExecuteChanged;
}

Einsatzgebiete von MVVM

MVVM hat sich in verschiedenen Bereichen der Softwareentwicklung etabliert. Die ursprüngliche Heimat des Patterns sind Desktop-Anwendungen mit WPF, aber es findet heute breite Anwendung in modernen Frameworks:

Plattform Framework/Technologie Besonderheiten
Windows Desktop WPF, UWP, WinUI Ursprüngliche MVVM-Plattform mit XAML
Cross-Platform .NET MAUI, Avalonia Moderne Cross-Platform-Entwicklung
Android Android Architecture Components ViewModel als Teil von Jetpack
iOS SwiftUI (ähnliches Konzept) Data Binding über @State und @Binding
Web Knockout.js, Vue.js, Angular JavaScript-Implementierungen von MVVM

Die Wahl des Frameworks hängt von der Zielplattform und den Projektanforderungen ab. Für Windows-Desktop-Anwendungen ist WPF nach wie vor die Referenz. Für mobile Apps bieten Android und iOS jeweils eigene MVVM-Implementierungen an.

Vergleich: MVVM vs. MVC vs. MVP

MVVM ist eines von mehreren Architekturmustern für die UI-Entwicklung. Die wichtigsten Alternativen sind MVC (Model-View-Controller) und MVP (Model-View-Presenter). Jedes Pattern hat seine Stärken und eignet sich für unterschiedliche Szenarien:

Aspekt MVC MVP MVVM
Kommunikation Controller vermittelt Presenter steuert View Data Binding
View-Abhängigkeit View kennt Model View kennt Presenter View kennt ViewModel
Testbarkeit Gut Sehr gut Sehr gut
Typischer Einsatz Web-Anwendungen Desktop/Mobile Desktop/SPA
Komplexität Mittel Mittel Höher (Binding-Setup)

MVC eignet sich besonders für klassische Webanwendungen mit serverseitigem Rendering. MVP bietet eine strikte Trennung, bei der die View komplett passiv ist. MVVM glänzt in Anwendungen mit komplexen UIs und häufigen Datenaktualisierungen, wo das automatische Data Binding die Entwicklung erheblich vereinfacht.

Vor- und Nachteile von MVVM

MVVM bietet bedeutende Vorteile für die UI-Entwicklung, bringt aber auch Herausforderungen mit sich. Die Entscheidung für MVVM sollte auf Basis der Projektanforderungen getroffen werden.

Vorteile

Die klare Trennung von View und ViewModel ermöglicht eine unabhängige Entwicklung und Testung beider Komponenten. UI-Designer können an der View arbeiten, während Entwickler parallel das ViewModel implementieren.

  • Testbarkeit: ViewModels lassen sich ohne UI komplett unit-testen
  • Wartbarkeit: Klare Trennung erleichtert Änderungen und Bugfixes
  • Wiederverwendbarkeit: Ein ViewModel kann mit verschiedenen Views verwendet werden
  • Parallelentwicklung: Designer und Entwickler arbeiten unabhängig voneinander
  • Automatische Synchronisation: Data Binding reduziert manuellen Code erheblich

Nachteile

MVVM ist kein Allheilmittel und kann bei falscher Anwendung zu unnötiger Komplexität führen. Besonders bei einfachen Anwendungen kann der Overhead unverhältnismäßig sein.

  • Lernkurve: Das Pattern erfordert Verständnis von Data Binding und Observer-Pattern
  • Overhead bei einfachen Apps: Für kleine Anwendungen kann MVVM überdimensioniert sein
  • Debugging: Data Binding-Fehler können schwer zu finden sein
  • Speicherverbrauch: Komplexe Bindings können Performance beeinflussen

Praxisbeispiel: ViewModel in C#

Das folgende Beispiel zeigt ein vollständiges ViewModel für eine einfache Aufgabenverwaltung. Es demonstriert Properties mit Change Notification, Commands für Benutzeraktionen und die Interaktion mit einem Model:

// Model: Repräsentiert eine Aufgabe
public class TaskItem
{
    public string Title { get; set; }
    public bool IsCompleted { get; set; }
}

// ViewModel für die Aufgabenverwaltung
public class TaskListViewModel : INotifyPropertyChanged
{
    private ObservableCollection<TaskItem> _tasks;
    private string _newTaskTitle;

    public ObservableCollection<TaskItem> Tasks
    {
        get => _tasks;
        set { _tasks = value; OnPropertyChanged(nameof(Tasks)); }
    }

    public string NewTaskTitle
    {
        get => _newTaskTitle;
        set { _newTaskTitle = value; OnPropertyChanged(nameof(NewTaskTitle)); }
    }

    // Command zum Hinzufügen einer neuen Aufgabe
    public ICommand AddTaskCommand { get; }

    public TaskListViewModel()
    {
        Tasks = new ObservableCollection<TaskItem>();
        AddTaskCommand = new RelayCommand(AddTask, () => !string.IsNullOrEmpty(NewTaskTitle));
    }

    private void AddTask()
    {
        Tasks.Add(new TaskItem { Title = NewTaskTitle });
        NewTaskTitle = string.Empty;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string name) =>
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}

MVVM in der Praxis

MVVM ist in der professionellen Softwareentwicklung weit verbreitet, besonders bei der Entwicklung von Desktop-Anwendungen und mobilen Apps. Unternehmen, die WPF, .NET MAUI oder Android-Apps entwickeln, setzen häufig auf MVVM als Architekturgrundlage. Auch im Webbereich findest du MVVM-Konzepte in Frameworks wie Vue.js und Angular.

Wer als Fachinformatiker für Anwendungsentwicklung im Bereich Desktop- oder Mobile-Entwicklung arbeiten möchte, wird MVVM mit hoher Wahrscheinlichkeit begegnen. Das Verständnis von Architekturmustern wie MVVM, MVC und der dahinterliegenden Konzepte wie Kapselung und Abstraktion gehört zu den gefragten Kompetenzen in diesem Berufsfeld.

Quellen und weiterführende Links