PresentationBase.Core Logo PresentationBase.Core
Azure DevOps builds (branch) Azure DevOps tests (branch) SonarCloud Quality Gate NuGet version NuGet downloads GitHub license
A lightweight MVVM implementation targeting .NET Standard 2.0 and .NET 6.0.
It contains base implementations for view models, commands, data transfer object conversion and more.
Take a look at the Quick start in the wiki. Here are some basic examples for using PresentationBase.Core:
public class AwesomeViewModel : ViewModel { private string _name; public string Name { get => _name; set => SetProperty(ref _name, value); } }
public class AwesomeViewModel : ViewModel { private string _name; public string Name { get => _name; set => SetProperty(ref _name, value, NameValidation); } private IEnumerable<string> NameValidation(string value) { if (string.IsNullOrEmpty(value)) yield return "Name cannot be null or empty!"; else if (value == "sungaila") yield return "Name cannot be stupid!"; } }
public class AwesomeViewModel : ViewModel { public ObservableViewModelCollection<ChildViewModel> Children { get; } public AwesomeViewModel() { Children = new ObservableViewModelCollection<ChildViewModel>(this); Children.Add(new ChildViewModel { Nickname = "Blinky" }); Children.Add(new ChildViewModel { Nickname = "Pinky" }); Children.Add(new ChildViewModel { Nickname = "Inky" }); Children.Add(new ChildViewModel { Nickname = "Clyde" }); } }
Your command can be defined anywhere you want (as long as its assembly is referenced by the application). Please note that a parameterless constructor (or none at all) is needed.
public class AlertCommand : ViewModelCommand<AwesomeViewModel> { public override void Execute(AwesomeViewModel parameter) { System.Windows.MessageBox.Show("You just clicked that button."); } public override bool CanExecute(AwesomeViewModel parameter) { return parameter.Name != "John Doe"; } }
public class AlertCommandAsync : ViewModelCommandAsync<AwesomeViewModel> { protected override async Task ExecutionAsync(AwesomeViewModel parameter) { await Task.Run(() => { System.Threading.Thread.Sleep(2000); System.Windows.MessageBox.Show("You clicked that button two seconds ago."); }); } }