58 lines
1.5 KiB
C#
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);
|
||
|
}
|
||
|
}
|
||
|
}
|