2016-05-16 93 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