2014-01-11 55 views
0

好吧,所以我在我的代碼隱藏屬性public Person ActualPerson { get; set; }。我設置DataContext像這樣:this.DataContext = this;當對象改變我的觀點不要在wpf

在XAML中我綁定DataContextStackPanel像這樣:DataContext="{Binding ActualPerson,UpdateSourceTrigger=PropertyChanged}"。並在每個TextBlockText="{Binding Path=Name,UpdateSourceTrigger=PropertyChanged}"

我的問題是,當我開始我的應用我有特性形成我的對象和所有的TextBlocks都充滿了數據,但是當Person類對象的變化,那麼鑑於沒有刷新值。我的人類實施INotifyPropertyChanged。我做錯了什麼?我的UserControll類應該實現INotifyPropertyChanged而不是Person類嗎?

回答

0

你的問題是你實際上沒有爲ActualPerson對象調用PropertyChanged,所以DataContext上的綁定不會被更新。

public Person ActualPerson 
{ 
    get { return this.actualPerson; } 
    set 
    { 
     if (this.actualPerson == value) 
      return; 

     this.actualPerson = value; 
     this.OnPropertyChanged("ActualPerson"); 
    } 
} 

public event PropertyChangedEventHandler PropertyChanged; 

protected void OnPropertyChanged(string propertyName) 
{ 
    if (this.PropertyChanged != null) 
     this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
} 

編輯:

這將有助於看到你的視圖模型和代碼隱藏,看看你是如何處理這個。例如,如果您正在設置UserControl上定義的ActualPerson對象,則最好使用DependencyProperty

public static readonly DependencyProperty ActualPersonProperty = DependencyProperty.Register(
    "ActualPerson", typeof (Person), typeof (MyUserControl), new PropertyMetadata(default(Person))); 

public Person ActualPerson 
{ 
    get { return (Person) GetValue(ActualPersonProperty); } 
    set { SetValue(ActualPersonProperty, value); } 
} 
+0

還記得指定INotifyPropertyChanged接口。 – Holstebroe

+0

好的,但我的Person類實現INotifyPropertyChanged。所以我的代碼隱藏類應該實現該接口? – ext

+0

那麼你的綁定需要通知某種變化。代替在代碼隱藏中使用'INotifyPropertyChanged',我會使用我在'DependencyProperty'作品中使用'DependencyProperty' @ext – Matt