using System; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Runtime.Serialization; using System.Windows.Input; using Aitex.Core.UI.MVVM; namespace MECF.Framework.Common.CommonData { [Serializable] [DataContract] public abstract class NotifiableItem : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void InvokePropertyChanged(string propertyName) { if (this.PropertyChanged != null) { this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } public void InvokePropertyChanged() { var properties = GetType().GetProperties(); var array = properties; foreach (var propertyInfo in array) { InvokePropertyChanged(propertyInfo.Name); if (propertyInfo.PropertyType == typeof(ICommand) && propertyInfo.GetValue(this, null) is DelegateCommand delegateCommand) { delegateCommand.RaiseCanExecuteChanged(); } } var fields = GetType().GetFields(); var array2 = fields; foreach (var fieldInfo in array2) { InvokePropertyChanged(fieldInfo.Name); if (fieldInfo.FieldType == typeof(ICommand) && fieldInfo.GetValue(this) is DelegateCommand delegateCommand2) { delegateCommand2.RaiseCanExecuteChanged(); } } } protected void Set(ref T field, T value, [CallerMemberName] string propertyName = null) { if (Equals(field, value)) return; field = value; InvokePropertyChanged(propertyName); } } }