gpt4 book ai didi

c# - 如何在更新属性时调用代码隐藏中的方法?

转载 作者:行者123 更新时间:2023-11-30 12:35:36 25 4
gpt4 key购买 nike

我需要的是当我的 View 模型上的属性更新时能够在我的 View 类的代码隐藏中执行代码。我的理解是我需要使用依赖属性。

我的 View 模型确实实现了 INotifyPropertyChanged

这是我的 View 模型中的属性:

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));

这里是我在 View 类中设置绑定(bind)的地方(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);
}

当我在我的 View 中为属性的 setter 设置断点时,即使在我观察到 View 模型中的值更改并引发 PropertyChanged 事件后,它也永远不会被击中。最终,我的目标是能够在 setter 中放入更多代码。

毛茸茸的细节,如果你好奇的话,我需要根据这个值在多个 StackPanel 之间移动一个 TextBlock。我似乎无法找到一种仅使用 XAML 的方法。

通常情况下,这些问题是我错过的简单又不明显的事情。不过,我所做的一切都没有帮助我解决这个问题。

最佳答案

When I put a break-point on the setter for the property in my view, it never gets hit even after I watch the value change in the view-model, and the PropertyChanged event raised. Ultimately, my goal is to be able to put more code in the setter.

你不能这样做。当您使用 DependencyProperties 时,当绑定(bind)属性发生变化时永远不会调用 setter。它的唯一目的是允许您从代码中设置 DP。

您需要添加一个 PropertyChangedCallback到 DP 上的元数据,并在那里添加额外的代码。这将在 DP 值更新时被调用,无论是通过绑定(bind)、代码等。

关于c# - 如何在更新属性时调用代码隐藏中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5199282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com