gpt4 book ai didi

c# - 如何避免直接设置字段值以便始终触发 setter 和 PropertyChanged 通知

转载 作者:行者123 更新时间:2023-11-30 17:50:18 27 4
gpt4 key购买 nike

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

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

没有代码示例的问题是不完整的,这里是问题的说明

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在编译时自动为您添加必要的“raisers”。所以你只能使用 Auto-Implemented Properties并避免使用私有(private)字段。

它是这样工作的:

而不是编写所有代码:

public string Name  
{
get
{
return _name;
}
set
{
if (_name != value)
{
_name = value;
RaisePropertyChanged("Name");
}
}
}

只需使用一个属性来完成这项工作:

[Magic] 
public string Name { get; set; }

扩展有更多的选择。我想你应该看看。

编辑如果您搜索更多,您可以找到更多扩展,这些扩展尽量避免键入 INotifyPropertyChanged 的所有模式而不丢失功能。

关于c# - 如何避免直接设置字段值以便始终触发 setter 和 PropertyChanged 通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20901655/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com