WPF:更新私有设置程序变量IS未引发propertyChanged事件处理程序
本文关键字:程序 propertyChanged 事件处理 IS 变量 新私 更新 设置 WPF | 更新日期: 2023-09-27 18:29:55
My View模型有以下代码。我正在使用MVVMLIght
class SettingsViewModel : ViewModelBase
{
public SettingsViewModel()
{ }
string _customerName;
public string customerName
{
get
{
return _customerName;
}
set
{
if (_customerName == value)
return;
_customerName = value;
RaisePropertyChanged("customerName");
}
}
private void _changeNamePrivate()
{
this._customerName = "SomePrivateName";
}
private void _changeNamePublic()
{
this.customerName = "SomePublicName";
}
}
我的问题是,当我调用_changeNamePrivate
时,不会引发RaisePropertyChanged
事件处理程序。但只有当我调用_changeNamePublic
函数时才会引发它。更新私有变量不应该引发属性更改事件吗?
_customerName
是一个字段,而不是属性。当你给它分配一些东西时,它会直接写入存储位置,而不会执行任何其他代码。另一方面,customerName
是一个属性:当你给它分配一些东西时,它会执行属性setter,从而引发事件。
正如@dkozl和@Ben已经说过的,这是意料之中的:
您提供的代码将只调用customerName
属性的set部分中的RaisePropertyChanged
事件处理程序:
public string customerName
{
get
{
return _customerName;
}
set
{
if (_customerName == value)
return;
_customerName = value;
RaisePropertyChanged("customerName");
}
}
因此,在_changeNamePublic()
中,它会更改属性的值,以便调用set部分并引发RaisePropertyChanged
处理程序。其中,与_changeNamePrivate()
一样,它只为字段_customerName
赋值。