DSoft.System.Mvvm
2.4.2109.301
See the version list below for details.
dotnet add package DSoft.System.Mvvm --version 2.4.2109.301
NuGet\Install-Package DSoft.System.Mvvm -Version 2.4.2109.301
<PackageReference Include="DSoft.System.Mvvm" Version="2.4.2109.301" />
paket add DSoft.System.Mvvm --version 2.4.2109.301
#r "nuget: DSoft.System.Mvvm, 2.4.2109.301"
// Install DSoft.System.Mvvm as a Cake Addin #addin nuget:?package=DSoft.System.Mvvm&version=2.4.2109.301 // Install DSoft.System.Mvvm as a Cake Tool #tool nuget:?package=DSoft.System.Mvvm&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)
- Core UI functions for Showing Alerts and Confirmation Dialogs (using platform specific implementations)
- 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
- Processes a array of Assemblies and registers any instances of the
Register<T,T2>
- Explicitly registers an interface,
T
, against an implementatio,T2
- Explicitly registers an interface,
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 | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. 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 | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
-
net5.0
- No dependencies.
NuGet packages (6)
Showing the top 5 NuGet packages that depend on DSoft.System.Mvvm:
Package | Downloads |
---|---|
DSoft.System.Mvvm.Ui
Core UI library for System.Mvvm.UI |
|
DSoft.System.Mvvm.Hosting
Microsoft.Extensions.Hosting helper library and System.Mvvm extensions |
|
DSoft.System.Mvvm.UI.WPF
WPF platform support for DSoft.System.Mvvm.UI for .NET Framework 4.62 AND NET6+ |
|
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 |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
3.4.2411.191 | 142 | 11/19/2024 |
3.4.2406.251 | 435 | 6/25/2024 |
3.3.2405.241 | 316 | 5/24/2024 |
3.3.2405.21 | 277 | 5/5/2024 |
3.2.2301.91 | 1,680 | 1/9/2023 |
3.1.2208.151 | 1,950 | 8/15/2022 |
3.1.2205.231 | 2,010 | 5/23/2022 |
3.1.2205.52-beta1 | 620 | 5/5/2022 |
3.0.2202.121 | 1,951 | 2/12/2022 |
3.0.2111.271-prerelease | 620 | 11/27/2021 |
3.0.2110.81-prerelease | 359 | 10/8/2021 |
3.0.2110.71-prerelease | 295 | 10/7/2021 |
3.0.2110.61-prerelease | 298 | 10/6/2021 |
3.0.2110.41-prerelease | 342 | 10/4/2021 |
2.4.2109.301 | 2,165 | 9/30/2021 |
2.4.2108.41 | 643 | 8/5/2021 |
2.3.2107.201 | 542 | 7/20/2021 |
2.3.2105.221 | 1,426 | 5/24/2021 |
2.3.2105.211-preview2 | 283 | 5/21/2021 |
2.2.2103.241-preview2 | 265 | 3/24/2021 |
2.2.2102.142-prerelease | 194 | 2/14/2021 |
2.2.2102.141-preview1 | 201 | 2/14/2021 |
2.1.2103.242-preview2 | 235 | 3/24/2021 |
2.1.2102.81 | 631 | 2/8/2021 |
2.0.2011.103 | 651 | 11/10/2020 |
1.3.2010.162-prerelease | 295 | 10/16/2020 |
1.3.2010.151-prerelease | 300 | 10/15/2020 |
1.2.2010.151 | 570 | 10/15/2020 |
1.2.2010.121 | 654 | 10/12/2020 |
1.2.2006.221 | 771 | 6/22/2020 |
1.2.2005.121 | 621 | 5/12/2020 |
1.2.2004.202 | 582 | 4/20/2020 |
1.2.2004.91 | 601 | 4/9/2020 |
1.2.2002.171 | 3,004 | 2/17/2020 |
1.2.1911.261 | 2,594 | 11/26/2019 |
1.2.1911.212 | 594 | 11/21/2019 |
1.2.1911.211 | 495 | 11/21/2019 |
1.2.1911.55 | 529 | 11/5/2019 |
1.2.1911.54 | 511 | 11/5/2019 |
1.2.1911.51 | 534 | 11/5/2019 |
1.2.1909.251 | 575 | 9/25/2019 |
1.2.1909.202 | 1,091 | 9/20/2019 |
1.2.1909.201-preview | 352 | 9/20/2019 |
1.2.1908.819 | 614 | 8/8/2019 |
1.2.1908.817-preview | 384 | 8/8/2019 |
1.2.0-preview1 | 409 | 8/7/2019 |
- Removed obsolete methods and properties