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函数时才会引发它。更新私有变量不应该引发属性更改事件吗?

WPF:更新私有设置程序变量IS未引发propertyChanged事件处理程序

_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赋值。