我經常最終編寫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