我是 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 模型中处理 AxisVM
的 PropertyChanged
即可:
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/