BindableBase.SetProperty 没有更新 UI

BindableBase.SetProperty is not updating UI

真的很奇怪,但是当我调用BindableBase.SetProperty()时UI没有更新:

private string person;
public string Person
{
    get { return person; }
    set
    {
        person = value;
        SetProperty(ref this.person, value);//Not updating UI
        //OnPropertyChanged("Person");//It works really nice
    }
}

我正在使用 Prism.Core.6.1.0\lib\net45\Prism.dll 及其 Version=6.1.0.0

然而,OnPropertyChanged(string propertyName) 完美运行:

public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

我错过了什么?任何帮助将不胜感激!:)

那是因为 person = value; 指令。 BindableBase.SetProperty 检查两个参数之间是否相等,并且仅在它们不相等时引发 PropertyChanged 事件。所以删除这一行应该会有帮助。

SetProperty 的工作方式是为您完成所有必需的更新逻辑。它将检查值是否已更改,然后立即 return 或更新值(它可以这样做,因为它由 ref 传递),然后引发 属性 changed 事件。

你提前完成了一半的工作,所以它会立即总是return,因为它会发现person字段和person字段之间没有区别value.

只需将您的 属性 更改为:

public string Person
{
    get { return person; }
    set { SetProperty(ref person, value); }
}