Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Apr 2, 2024. It is now read-only.

A lightweight MVVM implementation targeting .NET Standard 2.0 and .NET 6.0.

License

Notifications You must be signed in to change notification settings

sungaila/PresentationBase.Core

Repository files navigation

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.

Examples

Take a look at the Quick start in the wiki. Here are some basic examples for using PresentationBase.Core:

ViewModels with bindable properties

public class AwesomeViewModel : ViewModel
{
 private string _name;
 
 public string Name
 {
 get => _name;
 set => SetProperty(ref _name, value);
 }
}

... and with property validation

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!";
 }
}

ViewModel collections

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" });
 }
}

Commands

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";
 }
}

... and async commands

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.");
 });
 }
}

AltStyle によって変換されたページ (->オリジナル) /