.NET MAUI: MVVM mit dem CommunityToolkit.Mvvm statt MvvmLight
Auf einen Blick
| Gilt für | .NET MAUI 9/10, CommunityToolkit.Mvvm 8.x; Migration von MvvmLight (Xamarin) |
|---|---|
| Bereich | Softwareentwicklung |
| Dauer | ca. 30 Minuten (Einstieg), Migration je nach Projektgröße |
| Rechte | Entwicklungsumgebung |
| Stand | Oktober 2026 |
MVVM in .NET MAUI setzen Sie heute mit dem CommunityToolkit.Mvvm um – dem offiziellen Nachfolger von MvvmLight. Die früher unter Xamarin typischen Probleme mit MvvmLight-Bindings, die beim Navigieren „hängen bleiben“ oder Daten verspätet anzeigen, entfallen: .NET MAUI bindet über den BindingContext der Seite, und das Toolkit erzeugt Eigenschaften und Befehle per Quellcode-Generator.

Problem
- In einer Xamarin-App mit MvvmLight werden Daten nicht oder verspätet angezeigt; nach mehrfachem Navigieren reagieren Bindings doppelt oder gar nicht.
- MvvmLight wird seit 2021 nicht mehr weiterentwickelt und ist für .NET MAUI nicht vorgesehen.
Ursache
MvvmLight verwendete unter Xamarin.Android und Xamarin.iOS eigene Binding-Objekte, die je nach Lebenszyklus manuell gelöst werden mussten (Detach() in OnStop bzw. ViewDidDisappear). Wurde das vergessen, blieben Bindings am ViewModel hängen – mit Speicherlecks und doppelten Aktualisierungen. In .NET MAUI übernimmt das XAML-Binding-System diese Aufgabe.
Lösung: CommunityToolkit.Mvvm
dotnet add package CommunityToolkit.Mvvm
ViewModel
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
public partial class AuftragViewModel : ObservableObject
{
[ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(SpeichernCommand))]
private string? kunde;
[ObservableProperty]
private decimal betrag;
[RelayCommand(CanExecute = nameof(KannSpeichern))]
private async Task SpeichernAsync()
{
await Task.Delay(500); // z. B. Service-Aufruf
}
private bool KannSpeichern() => !string.IsNullOrWhiteSpace(Kunde);
}
Der Generator erzeugt die öffentlichen Eigenschaften Kunde und Betrag mit PropertyChanged sowie den Befehl SpeichernCommand.
Seite und Dependency Injection
// MauiProgram.cs
builder.Services.AddTransient<AuftragViewModel>();
builder.Services.AddTransient<AuftragPage>();
// AuftragPage.xaml.cs
public partial class AuftragPage : ContentPage
{
public AuftragPage(AuftragViewModel vm)
{
InitializeComponent();
BindingContext = vm;
}
}
<ContentPage ... x:DataType="vm:AuftragViewModel">
<VerticalStackLayout Padding="16" Spacing="8">
<Entry Text="{Binding Kunde}" Placeholder="Kunde" />
<Entry Text="{Binding Betrag}" Keyboard="Numeric" />
<Button Text="Speichern" Command="{Binding SpeichernCommand}" />
</VerticalStackLayout>
</ContentPage>
Von MvvmLight umsteigen
| MvvmLight | CommunityToolkit.Mvvm |
|---|---|
ViewModelBase |
ObservableObject
|
Set(ref feld, wert) / RaisePropertyChanged() |
[ObservableProperty] bzw. SetProperty(ref feld, wert)
|
RelayCommand, RelayCommand<T> |
[RelayCommand], auch async mit AsyncRelayCommand
|
Messenger.Default |
WeakReferenceMessenger.Default
|
SimpleIoc / ViewModelLocator |
Dependency Injection über builder.Services
|
SetBinding/Detach() in Activity/ViewController |
XAML-Binding über BindingContext, kein manuelles Lösen
|
Xamarin.Forms MessagingCenter |
WeakReferenceMessenger
|
Hinweise
- Kompilierte Bindungen:
x:DataTypeauf Seiten und DataTemplates setzen – Tippfehler in Bindungen fallen dann schon beim Build auf. - Messenger und Speicher: Der
WeakReferenceMessengerhält Empfänger nur schwach; trotzdem Empfänger bei langlebigen Objekten mitUnregisterAll(this)abmelden. - Plattformcode: Wer in .NET for Android/iOS ohne XAML arbeitet, kann das Toolkit für ViewModels ebenfalls nutzen; die Bindung an native Controls erfolgt dann über
PropertyChanged-Ereignisse – an den passenden Lebenszyklus-Methoden an- und abmelden. - Bei Architektur und Modernisierung Ihrer Apps unterstützt Sie die individuelle Softwareentwicklung von m.a.x. it.
Siehe auch
- .NET MAUI: Ladeanzeige mit ActivityIndicator
- Von Xamarin zu .NET MAUI migrieren
- Dependency Injection
- Lokale Funktionen in C-Sharp (Local Functions)
Links und Quellen
- Microsoft Learn: MVVM Toolkit (CommunityToolkit.Mvvm)
- Individuelle Softwareentwicklung und App-Entwicklung von m.a.x. it
Über m.a.x. it Die m.a.x. Informationstechnologie AG ist seit über 30 Jahren IT-Partner mittelständischer und großer Unternehmen in München und bietet maßgeschneiderte Lösungen und Services in den Bereichen Cloud, Cybersecurity, Netzwerk, Windows, Linux und Softwareentwicklung. Sie haben eine Frage zu diesem Artikel oder brauchen Unterstützung?
