1. 程式人生 > >.net 4.0及以下版本,MVVM模式ViewModel基類:使用StackTrace實現INotifyPropertyChanged介面

.net 4.0及以下版本,MVVM模式ViewModel基類:使用StackTrace實現INotifyPropertyChanged介面

using System; using System.ComponentModel;

namespace SSMart_Model {     public class VModelBase: INotifyPropertyChanged, IDisposable     {         public event PropertyChangedEventHandler PropertyChanged;         public bool IsInDesignMode;         /// <summary> 顯示名稱 </summary>         public virtual string DisplayName { get; protected set; }

        #region 構造

        public VModelBase()         {

        }         #endregion

        private void OnPropertyChanged(string propertyName)         {             if (this.PropertyChanged != null)             {                 PropertyChanged(this, new PropertyChangedEventArgs(propertyName));             }         }         private static string GetProperyName(string methodName)         {             if (methodName.StartsWith("get_") || methodName.StartsWith("set_") ||                 methodName.StartsWith("put_"))             {                 return methodName.Substring(4);             }             throw new Exception(methodName + " not a method of Property");         }

        protected void SetProperty<T>(ref T name, T value)         {             if (object.Equals(name, value)) return;             name = value;             string propertyName = GetProperyName(new System.Diagnostics.StackTrace(true).GetFrame(1).GetMethod().Name);             this.OnPropertyChanged(propertyName);         }

        #region IDisposable Members         public void Dispose()         {             this.OnDispose();         }         /// <summary>         /// 若支援IDisposable,請重寫此方法,當被呼叫Dispose時會執行此方法。         /// </summary>         protected virtual void OnDispose()         {         }         #endregion     } }

在其他類中使用:

public string UserPassword         {             get             {                 return userPassword;             }             set             {                 base.SetProperty<string>(ref this.userPassword, value);                            }         }