我经常最终编写SubscribeToEvents()
和UnsubscribeEvents()
函数,当属性获取新值时,在我的属性设置器中调用该函数。虽然这样做的代码非常简单,但我感觉没有必要,因为它基本上复制了代码(除了从+=
和-=
以外代码是相同的)。用于处理事件订阅的实用类(AddSubscription()/ UnsubscribeAll())
我试图创建一个由具有AddSubscription(EventHandler, EventHandler)
功能和UnsubscribeAll()
函数,用于清除由AddSubscription
注册的所有订阅处理这个小工具类:
public class EventSubscriber
{
private readonly List<KeyValuePair<EventHandler, EventHandler>> _subscriptions = new List<KeyValuePair<EventHandler, EventHandler>>();
public void AddSubscription(EventHandler toSubscribe, EventHandler subscriber)
{
toSubscribe += subscriber;
_subscriptions.Add(new KeyValuePair<EventHandler, EventHandler>(toSubscribe, subscriber));
}
public void UnsubscribeAll()
{
foreach (KeyValuePair<EventHandler, EventHandler> subscription in _subscriptions)
{
EventHandler toSubscribe = subscription.Key;
EventHandler subscriber = subscription.Value;
toSubscribe -= subscriber;
}
_subscriptions.Clear();
}
}
但是,我不能通事件中AddSubscription()
:
EventSubscriber subscriber = new eventSubscriber();
subscriber.AddSubscription(_someControl.SomeEvent, OnSomeEvent);
这种失败,错误
事件“......”只能出现在左手侧+ =或 - =
有什么方法可以让我避免这种情况,还是我找错了树?
我很高兴这是可能的WPF。我使用WinForms,所以我运气不佳,直到我们开始使用WPF – larsmoa