我需要知道哪些處理程序被子集化爲ObservableCollection類的CollectionChanged事件。我發現的唯一解決方案是在事件的委託上使用Delegate.GetInvocationList()。問題是,我無法獲得Reflection來查找編譯器生成的委託。 AFAIK代表與事件具有相同的名稱。我用下面的代碼:獲取編譯器生成的事件代理
PropertyInfo notifyCollectionChangedDelegate = collection.GetType().GetProperty("CollectionChanged", BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy);
我的目標是管理訂閱NotifyCollectionChanged事件,但我只需要訂閱一次。我不想管理每個ObservableCollection的布爾字段來保存這些信息。 (訂閱發生在多次被調用的地方。) 所以最簡單的是檢查我是否已經訂閱了一個處理程序。要麼我在這裏丟失了一些非常簡單的東西,要麼.net框架事件真的需要公開一個給予訂閱處理程序的屬性。 (順便說一句,我發現一篇文章描述了WinForms委託系統,但我需要這個。) – 2010-04-12 13:40:12