namespace FeedbackGeneratorQQ.Models { using System.Collections.Generic; using System.ComponentModel; using System.Runtime.CompilerServices; public class BindableModel : INotifyPropertyChanged { private readonly Dictionary properties = new Dictionary(); /// /// Gets the value of a property /// /// The property name protected T Get([CallerMemberName] string name = null) { object value; if (this.properties.TryGetValue(name, out value)) { return value == null ? default(T) : (T)value; } return default(T); } /// /// Sets the value of a property /// /// The property value /// The property name protected void Set(T value, [CallerMemberName] string name = null) { if (Equals(value, this.Get(name))) { return; } this.properties[name] = value; this.OnPropertyChanged(name); } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } }