我搜索了一下,很惊讶我没有找到更简单的答案。我遵循一个简单的 MVVM 模型,并有一个视图模型(“parentVM”),它包含另一个视图模型(“childVM”)作为由公共属性(get/set)公开的字段。我遇到的问题是我试图在父的初始化程序中订阅子视图模型的 propertychanged 事件。但是当设置一个新的 childVM 时,事件处理程序就会丢失。
public parentVM : INotitifyPropertyChange{
private _childVM = new childVM();
public parentVM(){
_childVM.PropertyChanged += someHandler;
}
public childVM {
get{
return _childVM;
}
set{
_childVM = value;
//EVENTHANDLERS ARE NOW GONE
}
}
....
}
有没有办法将现有的事件处理程序转移到新对象?
这是一个简化的例子。我知道我可以简单地移动这条线:
_childVM.PropertyChange += someHandler;
但这不适用于订阅该事件的外部对象。在这些情况下,您不太可能知道对象是什么以及处理程序是什么。
也许有一种解决方法,方法是在内部引用一个 List,从 += eventHandler 更改为更手动的 AddHander 方法,然后填充 List 以供将来参考。不知道在这一点上只是在考虑外卖。
PS如果示例中有语法错误,请原谅,我没有智能感知,这不是真正的代码......只是试图传达这一点。