我有一个实现INotifyPropertyChanged的类。我有一个触发通知的属性设置器。但是如果我只使用该字段并直接分配值,C# 编译器就不知道/抱怨任何事情。但是如果我这样做,属性更改通知是完全没有用的。我经常看到这个错误被犯。所以我的问题是
- 如何验证此错误(设置归档值而不是使用setter)是否在大型解决方案中发生,
- 发生这种情况时如何强制某种警告或错误
由于没有代码示例就没有完整的问题,因此这里是 proplem 的插图
class Person : INotifyPropertyChanged
{
private string personName;
public string PersonName
{
get { return personName; }
set { if(personName!=value)
{
personName = value;
this.OnPropertyChanged ("PersonName");
}
}
}
public bool dummy()
{
personName = "not notified"; //need to detect/avoid this
}
}
也许你可以尝试一个扩展。
Kind Of Magic会在编译时自动为您添加必要的"提升器"。因此,您可以仅使用自动实现的属性并避免使用私有字段。
它的工作原理是这样的:
而不是编写所有代码:
public string Name
{
get
{
return _name;
}
set
{
if (_name != value)
{
_name = value;
RaisePropertyChanged("Name");
}
}
}
只需使用属性即可完成此工作:
[Magic]
public string Name { get; set; }
扩展程序有更多的选择。我想你应该看看。
编辑如果您搜索更多,您可以找到更多扩展,尝试避免键入INotifyPropertyChanged
的所有模式而不会丢失功能。
你的代码没问题。在此应用程序中,属性仅为 WPF UI 网关。使用以下命名约定可以更轻松地识别属性和字段:
//Camel convention and beginning with underscore and small letter
private String _personName;
//Camel convention and capital letter beginning
public string PersonName { get; set; }
通常,ViewModel
不必访问属性:这是命令的特权。ViewModel
您所要做的就是在构造函数中初始化私有字段。
这不是引发警告的潜在错误,但它可能是混淆代码的第一步。
当然,如果您非常担心破坏 MVVM 模式原则,那么有一系列框架可以成功应对 MVVM 例程。
此外,您还可以发现使用一些指南刷新 MVVM 知识很有用。