如何在更新属性时调用代码隐藏方法?
问题描述:
我需要的是当我的视图模型上的属性被更新时,能够在我的视图类的代码隐藏中执行代码。我的理解是我需要使用依赖属性。如何在更新属性时调用代码隐藏方法?
我的视图模型确实实现了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值更新时,这将被调用,无论是通过绑定,代码等。
非常感谢!这正是我需要的。 – Jamie 2011-03-04 21:39:02