引发另一个类中某个对象的属性更改事件不起作用



在我的WPF应用程序中,我有两个属性,每个属性都在不同的类中(分别为ClassA和ClassB(。我想要的结果是,当我更改ClassA中的属性值时,如果我转到引用ClassB的视图,我应该会看到同样的更改被反映出来。但这并不是我的实际结果。相反,我的逻辑错误是ClassB中的属性没有得到更新。

这就是我如何设置我的两个班

public class ClassA : INotifyPropertyChanged
{
#region [Property Change]

public event PropertyChangedEventHandler PropertyChanged;

private void RaisePropertyChanged([CallerMemberName] string caller = "")
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(caller));
}
}
#endregion [Property Change]

public string Property_A
{
get => property_A;
set
{
property_A = value;
RaisePropertyChanged(nameof(Property_A));
RaisePropertyChanged("Property_B"); // not working...
}
}
private string property_A;
}

同时在ClassB.cs

public class ClassB : INotifyPropertyChanged
{
#region [Property Change]

public event PropertyChangedEventHandler PropertyChanged;

private void RaisePropertyChanged([CallerMemberName] string caller = "")
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(caller));
}
}
#endregion [Property Change]
private ClassA ClassAObject;
public string Property_B
{
get => ClassAObject.Property_A;
}

publicClassB()
{
ClassAObject = new ClassA();
}
}

我调试并看到,当Property_A的字符串值更改时,它将进入setter,并且尽管代码达到RaisePropertyChanged("Property_B"(,但它不会在ClassB中被激发。有人看到我做错了什么吗?

传播";"孩子";组件,您将需要订阅子级的PropertyChanged事件,如此答案中所建议的。

在你的情况下,这可能看起来像:

public class ClassB : INotifyPropertyChanged
{
// stuff left out for brevity

public ClassB()
{
ClassAObject = new ClassA();
// Subscribe to ClassAObject's event and let subscribers of
// ClassB know that something changed
ClassAObject.PropertyChanged += (sender, eventArgs) =>
{
RaisePropertyChanged(nameof(Property_B));
};
}
}

最新更新