FunctionalMVVM 1.0.0
dotnet add package FunctionalMVVM --version 1.0.0
NuGet\Install-Package FunctionalMVVM -Version 1.0.0
<PackageReference Include="FunctionalMVVM" Version="1.0.0" />
<PackageVersion Include="FunctionalMVVM" Version="1.0.0" />
<PackageReference Include="FunctionalMVVM" />
paket add FunctionalMVVM --version 1.0.0
#r "nuget: FunctionalMVVM, 1.0.0"
#:package FunctionalMVVM@1.0.0
#addin nuget:?package=FunctionalMVVM&version=1.0.0
#tool nuget:?package=FunctionalMVVM&version=1.0.0
functional-mvvm
Components to make MVVM more concise, easy and testable.
Example
public class Invoice : BaseViewModel
{
public int InvoiceNumber { get => Get(0); set => Set(value); }
public double Total { get => Get(0.0); set => Set(value); }
public bool IsPaid { get => Get(false); set => Set(value); }
}
public class Contact : BaseViewModel
{
public string FirstName { get => Get(""); set => Set(value); }
public string LastName { get => Get(""); set => Set(value); }
public string FullName => Get("");
public string NationalPhoneNumber { get => Get(""); set => Set(value); }
public int RegionCode { get => Get(1); set => Set(value); }
public string PhoneNumber => Get("");
public bool IsComplete => Get(false);
public ObservableCollection<Invoice> Invoices => GetCollection<Invoice>();
public bool IsCurrentCustomer => Get(false);
public double AmountOwing => Get(0.0);
a
public Contact()
{
Define(nameof(FullName), () => $"{FirstName} {LastName}");
Define(nameof(PhoneNumber), () => RegionCode + "-" + NationalPhoneNumber);
Define(nameof(IsComplete), () => !string.IsNullOrEmpty(LastName) && !string.IsNullOrEmpty(FirstName) && PhoneNumber.Length > 10);
Define(nameof(IsCurrentCustomer), () => Invoices.Count > 0);
Define(nameof(AmountOwing), () => Invoices.Where(inv => !inv.IsPaid).Sum(inv => inv.Total));
}
}
In the example above any changes to properties with setters will trigger PropertyChanged events. The properties with getters only are calculated values. For instance FullName is defined as $"{FirstName} {LastName}". Any changes to FirstName or LastName will recalculate FullName and also trigger a PropertyChanged event for FullName.
If an object that implements INotifyCollectionChanged is refered to in a Define expression then any changes to the collection content will trigger the expresion to be recalculated.
BaseViewModel implements IDisposable so that when it's disposed all event handlers are cleaned up.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.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.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 627 | 11/1/2020 |