如何在更新属性时调用代码隐藏方法?

如何在更新属性时调用代码隐藏方法?

问题描述:

我需要的是当我的视图模型上的属性被更新时,能够在我的视图类的代码隐藏中执行代码。我的理解是我需要使用依赖属性。如何在更新属性时调用代码隐藏方法?

我的视图模型确实实现了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唯一的方式。

更多的时候,这些问题很简单,我已经错过了一些很明显的事情。尽管如此,我试图帮助我排除这一个问题。

当我在视图中为属性设置了一个断点时,即使在观看模型中的值更改并引发PropertyChanged事件后,它也永远不会被打开。最终,我的目标是能够在setter中添加更多代码。

你不能这样做。当你使用DependencyProperties时,当绑定属性改变时,setter不会被调用。唯一的目的是让你从代码中设置DP。

您需要在您的DP上添加PropertyChangedCallback到元数据,并在其中添加额外的代码。当DP值更新时,这将被调用,无论是通过绑定,代码等。

+0

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