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

标签 c# wpf inotifypropertychanged

我是 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/

相关文章:

c# - 获取组中的选定单选按钮 (WPF)

c# - 用于自动 INotifyPropertyChanged 实现的 Resharper 模板

c# - 为什么在可移植库类中我无法实例化 ValidationContext 以及如何修复它?

wpf - 使用 MVVM 解决 Combobox 交互

c# - WPF INotifyPropertyChanged 用于链接的只读属性

c# - 创建用户时读取超时错误c#

c# - 迭代和修改集合的最佳实践?

c# - 在C#中使用字符串列表作为参数格式化字符串

c# - 使用 Moq 模拟 OData 客户端的容器

c# - WPF 绑定(bind)到子集合