gpt4 book ai didi

c# - 如何通知对象实例之外的属性?

转载 作者:行者123 更新时间:2023-12-02 19:36:50 26 4
gpt4 key购买 nike

我是 WPF 初学者,我对 PropertyChanged 事件有疑问:

我有一个 View 模型,其中包含另一个 View 模型的实例。 (这里我将使用通用名称)

我希望 AxisVM 的实例通知我的 SomeDouble 属性。 (无法使用转换器)

编辑:我没有在此处包含完整的类,PropertyChangedEvent 显然已实现。

public class ViewModel : INotifyPropertyChanged
{
private AxisVM axis;

public ViewModel()
{
this.AxisVM = new AxisVM();
}

public AxisVM Axis
{
get { return axis};
set { axis = value; FireOnPropertyChanged(); }
}

public double SomeDouble
{
get { return axis.Lowerlimit * 1.5 };
}

}

AxisVM 也继承自 INotifyPropertyChanged (我使用 ClassMemberName)

public class AxisVM: INotifyPropertyChanged
{
private double lowerLimit;

public double LowerLimit
{
get { return lowerLimit };
set { lowerLimit = value; FireOnPropertyChanged(); }
}

}

在 XAML 中,我将 Viewmodel 绑定(bind)为 DataContext(我认为在本例中这并不重要),然后将下限绑定(bind)到文本框。

当我编辑文本框时,轴下限的事件被触发并且值被更改( View 和 View 模型),但我需要通知我的 SomeDouble 属性,因为它会在以下情况下更新:下限发生变化。

即使我访问了 ViewModel 中轴实例的属性,它的属性更改事件也永远不会被触发(它会触发其事件,但不会通知我的 SomeDouble 属性)。

我现在很茫然,感谢任何帮助。

最佳答案

只需在 View 模型中处理 AxisVMPropertyChanged 即可:

public class ViewModel : INotifyPropertyChanged
{
private readonly AxisVM axis;

public ViewModel()
{
axis = new AxisVM();
axis.PropertyChanged += Axis_PropertyChanged;
}

private void Axis_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
FireOnPropertyChanged(nameof(SomeDouble));
}

...
}

关于c# - 如何通知对象实例之外的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55850495/

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