【发布时间】:2014-06-27 00:38:16
【问题描述】:
我有一些类似于以下内容:
public class MyClass
{
private List<MyOjectMapping> mappings;
public void Start()
{
foreach (var mapping in mappings)
{
mapping.ObjectA.PropertyA.PropertyChanged += (s, e) =>
{
// do something with mapping.ObjectB
};
}
}
public void Stop()
{
// unhook events
}
}
public class MyObject : INotifyPropertyChanged
{
public object PropertyA;
public object PropertyB;
}
public class MyOjectMapping
{
public object SomeSortOfKey;
public MyObject ObjectA;
public MyObject ObjectB;
}
如您所见,我正在尝试对 lambda 事件处理程序中的 foreach 迭代器执行一些操作。这行得通,但是这样做,我不知道如何在 Stop() 方法中解开事件。
我应该如何去连接 PropertyChanged 事件,以便我以后可以取消它并仍然访问 foreach 迭代器?
谢谢
【问题讨论】:
-
它类似于那个问题,但不同之处在于我将事件连接到一个循环中并希望使用迭代器值。
-
这有什么不同?答案是您必须存储委托并稍后将其删除。就是这样。
-
@Sriram:嗯,你实际上需要存储(至少)一对
Tuple<INotifyPropertyChanged, PropertyChangedEventHandler>,或者(更一般地)一个分离代表列表。
标签: c# eventhandler