2009-01-18 175 views
3

我在連接到視圖的演示者中有一個對象。在我的XAMTL我有以下幾點:更新對象後刷新wpf數據綁定

<Label Content="{Binding ElementName=PSV, Path=Presenter.Portfolio.Name}"/> 

現在,當創建控制,投資組合爲空,然後我運行這臺組合的另一種方法。我已經實現了INotifyPropertyChanged,但到目前爲止,我還沒有能夠觸發連接到綁定。

有人可以給我提示嗎?我可以綁定到屬性的屬性嗎?

回答

2

綁定始終與DataContext一起使用,您需要將Presenter設置到本地DataContext中。例如,你可以在你的窗口或用戶控件的構造函數中做到這一點:

this.DataContext = new Presenter(); 

你的綁定,然後將改變爲:

<Label Content="{Binding ElementName=PSV, Path=Portfolio.Name}"/> 

你的前路的演示部分是DataContext的暗示。

這樣DataContext正在監視NotifyChanged事件,並且會在投資組合從null更改爲具有值時正確更新視圖。

在回答問題的最後部分時,綁定到屬性屬性確實有效。

0

如果您正確實施INotifyPropertyChanged,這會工作得很好。有些事情可以嘗試:

  1. 嘗試在演示者的構造函數中使用虛擬名稱設置虛擬投資組合,以確保綁定實際上是正確的。
  2. 如果它在#1之後仍然不起作用,請在輸出窗口中查找任何綁定錯誤。
  3. 如果它在#1之後確實有效,請確保您設置的投資組合在創建時有名稱。如果沒有,您的投資組合課程還需要實施INotifyPropertyChanged,並在設置Name時提高事件。

如果沒有這些,請發佈您的代碼。

0

由於您已經實現了INotifyPropertyChanged,您是否確保在您的Portfolio.Name設置器中觸發PropertyChanged事件?

string _name; 
public string Name 
{ 
get 
{ 
    return _name; 
} 
set 
{ 
    _name = value; 
    // Alert the databinding engine about changes to the source value 
    OnPropertyChanged("Name"); 
} 

void OnPropertyChanged(string propertyName) 
{ 
    if (PropertyChanged != null) 
     PropertyChanged(propertyName); 
} 

#region INotifyPropertyChanged members 
public event PropertyChangedEventHandler PropertyChanged; 
#endregion