INotifyPropertyChanged:html
該接口包含一個事件, 針對屬性發生變動時, 執行該事件發生。函數
// // 摘要: // 通知客戶端屬性值已更改。 public interface INotifyPropertyChanged { // // 摘要: // 在屬性值更改時發生。 event PropertyChangedEventHandler PropertyChanged; }
接下來, 用一個簡單的示例說明其簡單使用方法(大部分經常使用的作法演示):this
1.定義一個ViewModelBase 繼承INotifyPropertyChanged 接口, 添加一個虛函數用於繼承子類的屬性進行更改通知spa
2.MainViewModel中兩個屬性, Code,Name 進行了Set更改時候的調用通知,code
public class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { if (this.PropertyChanged != null) this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } public class MainViewModel : ViewModelBase { private string name; private string code; public string Name { get { return name; } set { name = value; OnPropertyChanged("Name"); } } public string Code { get { return code; } set { code = value; OnPropertyChanged("Code"); } } }
每一個屬性調用OnPropertyChanged的時候, 都須要傳一個本身的屬性名, 這樣不少餘htm
改造:blog
CallerMemberName繼承
該類繼承與 Attribute, 不難看出, 該類屬於定義在方法和屬性上的一種特效類, 實現該特性容許獲取方法調用方的方法或屬性名稱接口
// // 摘要: // 容許獲取方法調用方的方法或屬性名稱。 [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] public sealed class CallerMemberNameAttribute : Attribute { // // 摘要: // 初始化 System.Runtime.CompilerServices.CallerMemberNameAttribute 類的新實例。 public CallerMemberNameAttribute(); }