在我的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));
};
}
}