2011-03-04 91 views
4

我需要的是當我的視圖模型上的屬性被更新時,能夠在我的視圖類的代碼隱藏中執行代碼。我的理解是我需要使用依賴屬性。如何在更新屬性時調用代碼隱藏方法?

我的視圖模型確實實現了INotifyPropertyChanged

這裏是我的視圖模型屬性:

private DisplayPosition statusPosition; 
public DisplayPosition StatusPosition 
{ 
    get { return this.statusPosition; } 
    set 
    { 
     this.statusPosition = value; 
     this.OnPropertyChanged("StatusPosition"); 
    } 
} 

這在我看來是我的依賴屬性:

public DisplayPosition StatusPosition 
{ 
    get { return (DisplayPosition)GetValue(StatusPositionProperty); } 
    set { SetValue(StatusPositionProperty, value); } 
} 
public static readonly DependencyProperty StatusPositionProperty = 
     DependencyProperty.Register(
     "StatusPosition", 
     typeof(DisplayPosition), 
     typeof(TranscriptView), 
     new PropertyMetadata(DisplayPosition.BottomLeft)); 

這裏就是我建立了我在我的視圖類綁定(處理程序this.DataContextChanged):

private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
    Binding myBinding = new Binding("StatusPosition"); 
    myBinding.Source = this.DataContext; 
    myBinding.NotifyOnTargetUpdated = true; 
    this.SetBinding(TranscriptView.StatusPositionProperty, myBinding); 
} 

當我把一個破發點上的setter用於p在我看來,即使在觀看模型中的值發生變化並且PropertyChanged事件上升之後,它也不會被擊中。最終,我的目標是能夠在setter中添加更多代碼。

毛茸茸的細節,如果你好奇的話,是我需要根據這個值在多個StackPanel之間移動一個TextBlock。我似乎無法找到XAML唯一的方式。

更多的時候,這些問題很簡單,我已經錯過了一些很明顯的事情。儘管如此,我試圖幫助我排除這一個問題。

回答

2

當我在視圖中爲屬性設置了一個斷點時,即使在觀看模型中的值更改並引發PropertyChanged事件後,它也永遠不會被打開。最終,我的目標是能夠在setter中添加更多代碼。

你不能這樣做。當你使用DependencyProperties時,當綁定屬性改變時,setter不會被調用。唯一的目的是讓你從代碼中設置DP。

您需要在您的DP上添加PropertyChangedCallback到元數據,並在其中添加額外的代碼。當DP值更新時,這將被調用,無論是通過綁定,代碼等。

+0

非常感謝!這正是我需要的。 – Jamie 2011-03-04 21:39:02

相關問題