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