2016-05-16 89 views
-2

这是很奇怪的,但是当我打电话BindableBase.SetProperty()没有更新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)); 
} 

什么我失踪?任何帮助将不胜感激!:)

+0

@downvoter你为什么downvote? – StepUp

回答

1

这是因为person = value;指令。 BindableBase.SetProperty检查两个参数之间是否相等,如果不相等,则仅引发PropertyChanged事件。所以删除这条线应该有所帮助。

2

SetProperty的工作方式是为您完成所有必需的更新逻辑。它会检查值是否已更改,然后立即返回或更新值(它可以做的,因为它通过ref),然后引发属性更改的事件。

你提前做一半的工作,所以它会总是立即回报,因为它会发现person场和value之间没有什么区别。

只要改变你的属性:

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

感谢您的回答!这真的很酷,但Grx70是第一个,他做出了很好的答案。我赞成你的努力。你的回答非常好。 – StepUp