这真的很奇怪,但当我调用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.0libnet45Prism.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
的工作方式是为您执行所有必需的更新逻辑。它将检查值是否已更改,然后立即返回或更新值(可以这样做,因为它是由ref
传递的),然后引发属性更改事件。
您提前完成了一半的工作,因此它将始终立即返回,因为它不会发现person
字段和value
之间有任何差异。
只需将您的财产更改为:
public string Person
{
get { return person; }
set { SetProperty(ref person, value); }
}