| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ComponentModel;using System.Windows.Threading;using System.Linq.Expressions;using System.Reflection;using System.Windows.Input;using Aitex.Core.RT.IOCore;using Aitex.Core.Utilities;using System.Runtime.CompilerServices;namespace Aitex.Core.UI.MVVM{    public class NotifyPropertyChangedBase : INotifyPropertyChanged    {        public event PropertyChangedEventHandler PropertyChanged;        protected void SetProperty<T>(ref T property, T value, [CallerMemberName] string memberName = "")        {            property = value;            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(memberName));        }    }    public class ViewModelBase : INotifyPropertyChanged, IViewModelControl    {        public event PropertyChangedEventHandler PropertyChanged;        public void InvokePropertyChanged(string propertyName)        {            if (PropertyChanged != null)            {                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));            }        }        public void InvokeAllPropertyChanged()        {            PropertyInfo[] ps = this.GetType().GetProperties();            foreach (PropertyInfo p in ps)            {                                     InvokePropertyChanged(p.Name);                if (p.PropertyType == typeof(ICommand))                {                    DelegateCommand<string> cmd = p.GetValue(this, null) as DelegateCommand<string>;                    if (cmd != null)                        cmd.RaiseCanExecuteChanged();                }            }            FieldInfo[] fi = this.GetType().GetFields();            foreach (FieldInfo p in fi)            {                InvokePropertyChanged(p.Name);                if (p.FieldType == typeof(ICommand))                {                    DelegateCommand<string> cmd = p.GetValue(this) as DelegateCommand<string>;                    if (cmd != null)                        cmd.RaiseCanExecuteChanged();                }            }            //Parallel.ForEach(this.GetType().GetProperties(), property => InvokePropertyChanged(property.Name));        }           public void InvokePropertyChanged()        {            PropertyInfo[] ps = this.GetType().GetProperties();            foreach (PropertyInfo p in ps)            {                if (!p.GetCustomAttributes(false).Any(attribute=>attribute is IgnorePropertyChangeAttribute))                    InvokePropertyChanged(p.Name);				if (p.PropertyType == typeof(ICommand))				{					if (p.GetValue(this, null) is IDelegateCommand cmd)						cmd.RaiseCanExecuteChanged();				}			}            FieldInfo[] fi = this.GetType().GetFields();            foreach (FieldInfo p in fi)            {                InvokePropertyChanged(p.Name);                if (p.FieldType == typeof(ICommand))                {                    DelegateCommand<string> cmd = p.GetValue(this) as DelegateCommand<string>;                    if (cmd != null)                        cmd.RaiseCanExecuteChanged();                }            }            //Parallel.ForEach(this.GetType().GetProperties(), property => InvokePropertyChanged(property.Name));        }       }}
 |