如何避免直接设置字段值,以便始终触发资源库和属性更改通知



我有一个实现INotifyPropertyChanged的类。我有一个触发通知的属性设置器。但是如果我只使用该字段并直接分配值,C# 编译器就不知道/抱怨任何事情。但是如果我这样做,属性更改通知是完全没有用的。我经常看到这个错误被犯。所以我的问题是

  1. 如何验证此错误(设置归档值而不是使用setter)是否在大型解决方案中发生,
  2. 发生这种情况时如何强制某种警告或错误

由于没有代码示例就没有完整的问题,因此这里是 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 知识很有用。

相关内容

  • 没有找到相关文章

最新更新