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));
}
}
}