我开发了很多视图模型,它们是:
1)所有人都必须实现 INotifyPropertyChanged 才能绑定到 UI。
2) 属性设置者必须在更改时提高 PropertyChanged。
3) PropertyChanged 事件必须提供正确的属性名称。
如果你(像我一样)不想写这样的东西:
public string Name
{
get
{
return _name;
}
set
{
if (_name != value)
{
_name = value;
RaisePropertyChanged("Name");
}
}
}
然后像这样重构这个方法,有时会忘记更新属性名称文字:
string _fundName;
public string FundName
{
get
{
return _fundName;
}
set
{
if (_fundName != value)
{
_fundName = value;
RaisePropertyChanged("Name");
}
}
}
然后花一天时间调试为什么你的 UI 没有刷新,数据绑定不能正常工作。
那么我们所需要的只是某种魔法。
如果我只需要写这个怎么办:
[Magic] // implicit transformation
public string FundName { get; set; }
或者如果我有很多属性:
[Magic]
public class MyViewModel
{
public string FundName { get; set; }
public string FundType { get; set; }
[NoMagic] // suppress transformation
public int InternalId { get; set; }
}
所以我刚刚开发了一个 MSBuild 任务来在构建后做这个魔术(http://kindofmagic.codeplex.com)。
问题是,您更喜欢哪种神奇的后处理?
INotifyPropertyChanging 的自动实现有意义吗?