DSoft.System.Mvvm.Ui 2.4.2109.301

There is a newer version of this package available.
See the version list below for details.
dotnet add package DSoft.System.Mvvm.Ui --version 2.4.2109.301
NuGet\Install-Package DSoft.System.Mvvm.Ui -Version 2.4.2109.301
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DSoft.System.Mvvm.Ui" Version="2.4.2109.301" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add DSoft.System.Mvvm.Ui --version 2.4.2109.301
#r "nuget: DSoft.System.Mvvm.Ui, 2.4.2109.301"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install DSoft.System.Mvvm.Ui as a Cake Addin
#addin nuget:?package=DSoft.System.Mvvm.Ui&version=2.4.2109.301

// Install DSoft.System.Mvvm.Ui as a Cake Tool
#tool nuget:?package=DSoft.System.Mvvm.Ui&version=2.4.2109.301

System.MMVM

Model View View Model (MVVM) classes with built in Dependency Injection (DI) for all variants of .NET.

Also provides centralised multi-platform UI Management for WPF (.NET Framework, .NET Core 3.1 and .NET 5.x) and WinUI 3 (Preview 4 and above)(Experimental)

Functionality

  • Implements INotifyPropertyChanged
  • Implements INotifyDataErrorInfo
  • Events for handling and detecting changes
  • Additional properties for
    • IsLoaded
    • IsBusy
    • IsBusyReveresed
    • IsValid
    • IsEditable
    • IsEditableReversed
  • Data Validation
  • Built-In Error notification methods
  • ICommand binding helpers
  • Notification extension actions
    • Rather than overriding a property, add an action when it changes
  • Base View Models for
    • Forms
    • Lists
    • Searchable Lists
    • Tree View Searchable Lists
  • UI
    • Core UI functions for Showing Alerts and Confirmation Dialogs (using platform specific implementations)
      • UWP and WPF (.NET Framework and .NET Core 3.0)
    • UI Dependency Service for calling platform UI code from shared code (details below)
  • Services
    • Simple Dependency Service container for dependecy injection service management

Classes

ViewModel

This is the base View Model abstract class which contains the most common MVVM functionality

ListViewModel<T,T2>

This class inherits from ViewModel and provides additonal functionality for managing lists of data

SearchViewModel<T, T2>

This class inherits from ListViewModel<T,T2> and adds search and filtering functionality to the standard ListViewModel

SearchTreeViewModel<T, T2>

This class inherits from SearchViewModel<T, List<T>> and adds Tree Path preparation to the standard SearchViewModel

Using System.Mvvm

Basic ViewModel

All of the ViewModel base classess are in the System.Mvvm namespace. To create a basic ViewModel simple inherit from ViewModel.

using System.Mvvm;
...
public class MainViewModel : ViewModel
{

To create a notifiable property create a full prop using the propfull snippet and add the a call to NotifyPropertyChanged.

    private int myVar;

    public int MyProperty
    {
        get { return myVar; }
        set { myVar = value;  NotifyPropertyChanged();}
    }

NotifyPropertyChanged will automatically pickup the calling member, but you can also be explicit.

    private int myVar;

    public int MyProperty
    {
        get { return myVar; }
        set { myVar = value; NotifyPropertyChanged(nameof(MyProperty)); }
    }

UI

The UI static class provides two features

  • A central interface for calling some simple UI functions
    • ShowAlert
    • ShowConfirmation
  • A simple UI dependency service manager for calling platform specific UI implementations from shared code

The standaerd UI functions can be called directly

var result = await UI.ShowConfirmationDialogAsync("Confirm this", "This is a platform specific confirmation message");

if (result)
    await UI.ShowAlertAsync("YAY!", "You confirmed that");

NOTE: The standard UI functions only work when the platform code has been registered using MvvmManager on the supported plafrom

You can call UI.Register<T> to manually register a class or UI.Init and register the calling assembly and a list of optional external assemblies.

To get the implementation from UI just call the UI.Get<T>() method and it will return the first class the inherits from T(or is T), which will typically be an interface.

For example:

var customUI = UI.Get<ITestCustomUIProvider>();

customUI.SayHello();

UI will cache the instance the first time a call to UI.Get<T>() is made for the type of T. Call the UI.Get<T>(bool) overload if you don't want the instance to be cached.

MvvmManager

MvvmManager is a class that is found in the Dsoft.System.Mvvm.Ui package and registers the standard UI implementation for UI and registers any instances of the UIServiceAttribute on the calling or external assemblys(when provided).

There is a method called Init on the MvvmManager with and overload that excepts a list of assemblies.

NOTE: Only WPF(.NET framework, .NET Core 3.1, .NET 5.x) and WinUI 3 (Preview 4 and above) are supported with MvvmManager at the moment

Services

Services is a simple dependency service manager for calling platform specific service implementations from shared code

You can call Services.Register<T> to manually register a class or Services.Register to register the calling assembly. Services will locate an instances of MvvmServiceAttribute within the assemblys and register the implementations types.

Addtional Services.Register methods are:

  • Register(Type[] types)
    • Registers a array of implementation types
  • Register(Assembly[] assemblies)
    • Processes a array of Assemblies and registers any instances of the MvvmServiceAttribute
  • Register<T,T2>
    • Explicitly registers an interface, T, against an implementatio, T2

To get the implementation from Services just call the Services.Get<T>() method and it will return the first type the inherits from T(or is T), which will typically be an interface. If you have specified an explicit implementation of an interface the system will return that.

For example:

var deviceProvider = Services.Get<ITestPlatformDeviceService>();

var printers = await deviceProvider.GetPrintersAsync();

Services will cache the instance the first time a call to Services.Get<T>() is made for the type of T.

Note: See SingletonServiceAtrribute below for cached or singleton instances of the service

MvvmServiceAttribute

MvvmServiceAttribute is an assembly level attribute that us used to identify Mvvm Services and register them with the system.

If you want Services.Init to register the implementation then you need to add something like this

[assembly: MvvmService(typeof(TestPlatformDeviceService))]

In this case TestPlatformDeviceService is the implementation.

MvvmServiceAttribute can also be used to explicity registers an interface against an implemenetion type

[assembly: MvvmService(typeof(ITestPlatformDeviceService), typeof(TestPlatformDeviceService))]

In this case TestPlatformDeviceService is the implementation and ITestPlatformDeviceService is the interface

SingletonServiceAttribute

SingletonServiceAttribute allows you to identify an implementation as a singleton instance.

Decorating a clas with this attribute will tel the system to instatiate only a single instance of the implementation.

[assembly: MvvmService(typeof(ITestCustomUIProvider), typeof(TestCustomUIProvider))]
namespace MVVMSample.Providers
{
    [SingletonService]
    public class TestCustomUIProvider : ITestCustomUIProvider
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net5.0-windows7.0 is compatible.  net5.0-windows10.0.18362 is compatible.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.1 is compatible. 
.NET Framework net461 is compatible.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
Universal Windows Platform uap10.0.16299 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on DSoft.System.Mvvm.Ui:

Package Downloads
DSoft.System.Mvvm.UI.WPF

WPF platform support for DSoft.System.Mvvm.UI for NET Core 3.1 and NET5+

DSoft.System.Mvvm.UI.Forms

Xamarin.Forms platform support for System.Mvvm.UI

DSoft.System.Mvvm.UI.WinUI

WinUI 3 platform support for System.Mvvm.UI for NET6+ and UWP

DSoft.System.Mvvm.UI.MAUI

MAUI platform support for System.Mvvm.UI

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
3.2.2301.91 1,319 1/9/2023
3.1.2208.151 1,433 8/15/2022
3.1.2205.231 1,498 5/23/2022
3.1.2205.52-beta1 496 5/5/2022
3.0.2202.121 1,393 2/12/2022
3.0.2111.271-prerelease 534 11/27/2021
3.0.2110.81-prerelease 219 10/8/2021
3.0.2110.71-prerelease 199 10/7/2021
3.0.2110.61-prerelease 170 10/6/2021
3.0.2110.41-prerelease 225 10/4/2021
2.4.2109.301 674 9/30/2021
2.4.2108.41 354 8/5/2021
2.3.2107.201 199 7/20/2021
2.3.2105.221 240 5/24/2021
2.3.2105.211-preview2 172 5/21/2021
2.2.2103.241-preview2 224 3/24/2021
2.2.2102.142-prerelease 155 2/14/2021
2.2.2102.141-preview1 154 2/14/2021
2.1.2103.242-preview2 184 3/24/2021
2.1.2102.81 425 2/8/2021
2.0.2011.103 487 11/10/2020
1.3.2010.162-prerelease 245 10/16/2020
1.3.2010.151-prerelease 258 10/15/2020
1.2.2010.151 409 10/15/2020
1.2.2010.121 406 10/12/2020
1.2.2006.221 582 6/22/2020
1.2.2005.121 430 5/12/2020
1.2.2004.202 432 4/20/2020
1.2.2004.91 462 4/9/2020
1.2.2002.171 520 2/17/2020
1.2.1911.261 561 11/26/2019
1.2.1911.212 458 11/21/2019

- Added Host IServiceCollection extensions