【发布时间】:2015-07-17 09:14:05
【问题描述】:
在 wpf 中,我们经常对可绑定属性使用以下模式:
private Foo _bar = new Foo();
public Foo Bar
{
get { return _bar; }
set
{
_bar = value;
OnPropertyChanged();
}
}
public void OnPropertyChanged([CallerMemberName] string property = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
CallerMemberNameAttribute 有很好的魔力,从 setter 名称为我们生成 "Bar" 参数。
但是,通常有些属性没有 setter 或依赖属性:
private Foo _bar;
public Foo Bar
{
get { return _bar; }
set
{
_bar = value;
OnPropertyChanged();
}
}
public bool IsBarNull
{
get { return _bar == null; }
}
在给定的示例中,当 Bar 更改时,IsBarNull 也需要事件。我们可以将OnPropertyChanged("IsBarNull"); 添加到Bar 设置器中,但是......使用string 作为属性是:
- 丑陋的;
- 难以重构(VS 的“重命名”不会重命名
string中的属性名称); - 可能是各种错误的根源。
WPF 存在这么久。是否还没有神奇的解决方案(类似于CallerMemberNameAttribute)?
【问题讨论】:
标签: c# wpf inotifypropertychanged