This is an open source package designed to define MVVM client application based on XAML (WinUI, UWP, WPF, or Xamarin)
Nuget | Github

The method SetValue is already raising PropertyChanged for you, so it is not necessary to type this additional code anymore.

Even more, if dependent properties are annotated with [DependOn(depending_property)], then the event PropertyChanged will automatically been raised also for them.

For example, if such a FullName property depends on other properties: FirstName and LastName as follows, then changing any of them will makes PropertyChanged being raised for FullName too. The same will happen on changing the collection of Friends that raises property changed on IsGang too

using devoft.ClientModel;

public class ContactEditorViewModel : ViewModelBase<DownloadViewModel>
    public string FirstName {  set => SetValue(value); get => GetValue<string>(); }
    public string LastName {  set => SetValue(value); get => GetValue<string>(); }

    public string FullName => $"{FirstName} {LastName}";

    public ObservableCollection<string> Friends {  get => GetCollection<ObservableCollection<string>>(); }
    public bool IsGang => Friends.Count > 3;
An error has occurred. This application may no longer respond until reloaded. Reload 🗙