我有一个使用Fody的Windows Phone 8应用程序将INotifyPropertyChanged注入属性。 我有Class First的属性A,它绑定到View中的文本框:
[ImplementPropertyChanged]
public class First
{
public int A { get; set; }
public int AA { get {return A + 1; } }
}
第二类,属性B取决于属性A(也绑定到文本框):
[ImplementPropertyChanged]
public class Second
{
private First first;
public int B { get {return first.A + 1; } }
}
更新A和AA工作正常,但B在第一次更改时不会自动更新。有没有一种简单而干净的方法来使用fody实现这样的自动更新,还是我必须创建自己的事件来处理它?</ p>
答案 0 :(得分:1)
我对Fody并不熟悉,但我怀疑是因为Second.B上没有二传手。第二个应该订阅First中的更改,如果First.A是要更改的属性,那么应该使用B的(私有)setter。
或者订阅First然后调用B属性更改事件:
[ImplementPropertyChanged]
public class Second
{
private First first;
public int B { get {return first.A + 1; } }
public Second(First first)
{
this.first = first;
this.first.OnPropertyChanged += (s,e) =>
{
if (e.PropertyName == "A") this.OnPropertyChanged("B");
}
}
答案 1 :(得分:1)
我最终以SKall建议的方式使用标准的INotifyPropertyChanged。
public class First : INotifyPropertyChanged
{
public int A { get; set; }
public int AA { get {return A + 1; } }
(...) // INotifyPropertyChanged implementation
}
public class Second : INotifyPropertyChanged
{
private First first;
public Second(First first)
{
this.first = first;
this.first.PropertyChanged += (s,e) => { FirstPropertyChanged(e.PropertyName);
public int B { get {return first.A + 1; } }
protected virtual void FirstPropertyChanged(string propertyName)
{
if (propertyName == "A")
NotifyPropertyChanged("B");
}
(...) // INotifyPropertyChanged implementation
}
};