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); }
}
真的很奇怪,但是当我调用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); }
}