【发布时间】:2020-06-15 10:33:59
【问题描述】:
为什么从 SetProperty 返回 bool?它没有被使用。
这是来自 Xamarin.Forms 模板的样板代码。
它也不用于继承类。
public class BaseViewModel : INotifyPropertyChanged
{
private bool isBusy = false;
public bool IsBusy
{
get { return isBusy; }
set { SetProperty(ref isBusy, value); }
}
protected bool SetProperty<T>(ref T backingStore,
T value,
[CallerMemberName] string propertyName = "",
Action onChanged = null)
{
if (EqualityComparer<T>.Default.Equals (backingStore, value))
return false;
backingStore = value;
onChanged?.Invoke();
OnPropertyChanged(propertyName);
return true;
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
var changed = PropertyChanged;
if (changed == null)
return;
changed.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
【问题讨论】:
-
在属性的 setter 中写入
if (SetProperty(ref backingStore, value)) { OnPropertyChanged(nameof(OtherProperty)); }之类的内容有时很有用。这确保了OtherProperty的额外通知仅在该属性实际发生更改时才会引发 -
对不起,我应该把全班都贴出来的:
-
这不会改变我所说的
-
不。检查属性的值是否从其设置器更改仍然很有用,一个很好的方法是从
SetProperty返回这样的布尔值。您没有碰巧发现有人这样做并不意味着 没有人 这样做。 -
请发布答案,而不是 cmets。评论是为了要求澄清,答案是为了……嗯,答案。