using System.ComponentModel; using System.Runtime.CompilerServices; namespace DeviceService.Entity { public abstract class NotifyBase : INotifyPropertyChanged { public event PropertyChangedEventHandler? PropertyChanged; /// /// 设置字段值并触发通知。值与旧值相等(或同为 null)时不触发,返回是否真正赋值。 /// protected bool SetProperty(ref T field, T value, [CallerMemberName] string? propertyName = null) { if (Equals(field, value)) { return false; } field = value; OnPropertyChanged(propertyName); return true; } /// 触发当前属性的通知,propertyName 缺省为调用方属性名。 protected void OnPropertyChanged([CallerMemberName] string? propertyName = null) { RaiseChanged(propertyName); } /// 显式触发指定属性的通知(如依赖属性联动)。 protected void OnPropertyChanged(string propertyName, params string[] morePropertyNames) { RaiseChanged(propertyName); foreach (var name in morePropertyNames) { RaiseChanged(name); } } /// 通知全部属性已变更(配合 DataTemplate 时刷新所有绑定,等效于 Text 通知)。 protected void RaiseAllChanged() { RaiseChanged(string.Empty); } private void RaiseChanged(string? propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName ?? string.Empty)); } } }