Skip to content
Nuvyntra Labs

Application framework

MVVMExpress

Modular MVVM for Uno Platform — ViewModels, async state, Frame navigation, dialogs

Current NuGet 1.0.1

A modular MVVM framework for Uno Platform on .NET 10: observable models, async commands, bindable AsyncState, lifecycle-aware cancellation, typed Frame navigation, ContentDialog, overlay toast, validation, pagination, forms, and a testing package. 1.0.0 is the first stable Uno family — independent of Plugin.Maui.MVVMExpress and Plugin.Wpf.MVVMExpress, with the same Core contract and no Shell host.

Install

dotnet add package Plugin.Uno.MVVMExpress.Core
dotnet add package Plugin.Uno.MVVMExpress
dotnet add package Plugin.Uno.MVVMExpress.Navigation
dotnet add package Plugin.Uno.MVVMExpress.Dialogs

Package IDs: Plugin.Uno.MVVMExpress.CorePlugin.Uno.MVVMExpressPlugin.Uno.MVVMExpress.NavigationPlugin.Uno.MVVMExpress.Dialogs

Plugin.Uno.MVVMExpress.* restores from nuget.org. CI also publishes GitHub Packages — see Use nuvyntralabs GitHub Packages from a C# project.

Or scaffold an app

dotnet new install Plugin.Uno.MVVMExpress.Templates
dotnet new uno-mvvmexpress -n MyApp

Adds a main window with Frame named NavigationHost, login replace-root, a list, a form, and tests. Then dotnet new uno-mvvmexpress-page -n Catalog --namespace MyApp. Same commands from the VS Code and Visual Studio extensions.

Overview

Uno Platform MVVMExpress is the application shell for production Uno apps. CommunityToolkit.Mvvm covers properties and commands, Prism covers regions, and ReactiveUI covers observable pipelines. An Uno app often needs all three plus bindable async state, lifecycle-aware cancellation, and typed Frame navigation — without taking three overlapping frameworks. Core targets net10.0 and does not reference Uno or MAUI. Host / Navigation / Dialogs target net10.0 and net10.0-desktop. Current NuGet is 1.0.1. Scaffold with Plugin.Uno.MVVMExpress.Templates (dotnet new uno-mvvmexpress / uno-mvvmexpress-page), or install the Uno MVVMExpress listings on the Visual Studio Code and Visual Studio Marketplaces. This is not Plugin.Maui.MVVMExpress or Plugin.Wpf.MVVMExpress: there is no PackageReference between the families. UseUnoMvvmExpress registers UnoDispatcherMainThread and UnoWindowContext. UseFrameNavigation maps ViewModels onto a Frame named NavigationHost. UseAuth<TChallenge>() wraps GuardedNavigator. Dialogs use ContentDialog. Toasts draw on an overlay — never Window.Content. Source generators, Reactive, Shell, UseDeepLinks, and UseSecureSessionAuth are out of 1.0.

Current release

  • 1.0.1. Host / Navigation / Dialogs / Templates README files pack as real markdown so nuget.org renders them. IDE extensions pin the 1.0.1 template pack.
  • 1.0.0. First stable Uno Platform family. Frame navigation, ContentDialog, overlay toasts, validation, pagination, templates, and Visual Studio Code / Visual Studio wrappers.
  • Independent of Plugin.Maui.MVVMExpress and Plugin.Wpf.MVVMExpress. Core contract aligns with MAUI 1.3; a ViewModel ports with a namespace swap. Breaking changes wait for 2.0.0.

Capabilities

  • ObservableModel, ViewModel lifecycle, and ViewModelCancellationToken cancelled on dispose.
  • Sync and async commands with UI-thread marshal, weak CanExecuteChanged, no-throw ICommand.Execute, timeout, retry, debounce, and throttle.
  • UseUnoMvvmExpress + UnoDispatcherMainThread + UnoWindowContext. Loaded / Unloaded lifecycle on navigated views.
  • UseFrameNavigation + ResetAsync / ReplaceRootAsync on a Frame named NavigationHost. There is no Shell host.
  • Navigators hop to IMainThread before constructing a Page. Off-thread factories throw.
  • Modal views open as ContentDialog. One INavigator per Window — first-class multi-window.
  • SectionHostView + SectionHostViewModel in-place tabs, SnapshotCollection load-once lists, MvvmSearch + SearchQuery.CommittedText.
  • FormViewModel.Bind, UnoFormViewModel (INotifyDataErrorInfo), dirty confirm, SubmitAsync, MustMatch, undo/redo.
  • UseAuth<TChallenge>() / AddAuth<TChallenge>() wraps GuardedNavigator. Register IAuthState yourself.
  • UnoNotifier toast via overlay — never wraps Window.Content.
  • IModule / AddModule<T>() for feature-team registration.
  • CoalescingDispatcher for inbox / hub handlers. IMainThread is the only marshal API in ViewModels.
  • Testing package: LeakProbe, ScaleProfile, FakeDialogs, FakeNavigator, ScopedNavigator.
  • dotnet new uno-mvvmexpress and uno-mvvmexpress-page via Plugin.Uno.MVVMExpress.Templates.
  • VS Code (Create New App / Add Page) and Visual Studio 2022+ (Tools → Uno MVVMExpress; File → New → Project) Marketplace wrappers.

Documentation

Package family

PackagePurposeStatus
Plugin.Uno.MVVMExpress.CoreGitHub Packagesnuget.orgObservable model, commands, ViewModel, SectionHost, IModule, navigator/cache/auth abstractions, state, outcome, messagingImplemented + tests
Plugin.Uno.MVVMExpressGitHub Packagesnuget.orgUseUnoMvvmExpress, UnoDispatcherMainThread, UnoWindowContext, Loaded/Unloaded lifecycle, SectionHostView, MvvmSearch, UnoFormViewModelImplemented
Plugin.Uno.MVVMExpress.NavigationGitHub Packagesnuget.orgUnoFrameNavigator, UseFrameNavigation, replace-root, ContentDialog modal stackImplemented + tests
Plugin.Uno.MVVMExpress.DialogsGitHub Packagesnuget.orgIDialogs + UnoDialogs (ContentDialog) + UnoNotifier (overlay toast)Implemented + tests
Plugin.Uno.MVVMExpress.ValidationGitHub Packagesnuget.orgDataAnnotations + IValidator + MustMatch + ILLink trim rootsImplemented + tests
Plugin.Uno.MVVMExpress.PaginationGitHub Packagesnuget.orgPagedCollection<T>, SnapshotCollection<T>, SearchQuery.CommittedTextImplemented + tests
Plugin.Uno.MVVMExpress.TestingGitHub Packagesnuget.orgLeakProbe, ScaleProfile, FakeDialogs, FakeNavigator, FakeMainThread, FakeConnectivity, FakeMessageHub, ScopedNavigatorImplemented + tests
Plugin.Uno.MVVMExpress.TemplatesGitHub Packagesnuget.orgdotnet new uno-mvvmexpress (app) and uno-mvvmexpress-page (XAML + ViewModel + service)Implemented

Compose with

Discussion

Comment on Plugin.Uno.MVVMExpress. The thread lives on this component's GitHub repository (nuvyntralabs/Plugin.Uno.MVVMExpress). Sign in with GitHub — Giscus uses Discussions, Utterances uses Issues.

Related in Application framework