Sic.Framework/MECF.Framework.Common/MECF/Framework/Common/CommonData/NotifiableItem.cs

58 lines
1.5 KiB
C#

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<string> 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<string> delegateCommand2)
{
delegateCommand2.RaiseCanExecuteChanged();
}
}
}
protected void Set<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
{
if (Equals(field, value))
return;
field = value;
InvokePropertyChanged(propertyName);
}
}
}