繁体   English   中英

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

[英]How do I have a method in code-behind called when a property is updated?

我需要的是能够在视图模型的属性更新时在视图类的代码背后执行代码。 我的理解是,我需要使用依赖项属性。

我的视图模型确实实现了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);
}

当我在视图中将断点放在属性的设置器上时,即使在观看视图模型中的值更改并引发PropertyChanged事件之后,也从未遇到断点。 最终,我的目标是能够在设置器中放入更多代码。

如果您感到好奇,那么毛茸茸的细节是,我需要基于此值在多个StackPanel之间移动一个TextBlock。 我似乎找不到找到仅XAML的方式。

通常,这些问题是我所错过的简单而又不明显的事情。 不过,我尝试做的所有事情都无法帮助我解决这个问题。

当我在视图中将断点放在属性的设置器上时,即使在观看视图模型中的值更改并引发PropertyChanged事件之后,也从未遇到断点。 最终,我的目标是能够在设置器中放入更多代码。

你做不到 当您使用DependencyProperties时,绑定属性更改时将永远不会调用setter。 这样做的唯一目的是允许您通过代码设置DP。

相反,您需要向DP上的元数据添加PropertyChangedCallback ,并在其中添加额外的代码。 当DP值更新时,无论是通过绑定,代码等,都将调用此方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM