我瞭解弱參考和弱事件模式。爲什麼在控件上使用弱事件模式而不是在其他地方管理生命週期?
使用弱事件模式的一個地方是在Controls和DataModel之間的DataBinding中。 在DataBinding的過程中,如果DataModel支持INotifyPropertyChange,則控件將要求DataModel通過事件向他建議更改。如果沒有弱事件,DataModel會保留對控件的強烈參考。由於該參考,該窗口可用於GC的同時,該控件不能被標記爲可用於GC。
微軟決定使用弱引用來解決這個問題。
我想知道是否其他替代方案像擬議的那樣不會更好?
替代方案:在窗口上實現IDisposable,並使用代碼傳遞子元素UiElements以要求他們將DataBinding移除到DataModel? 該解決方案會出現什麼問題?
什麼保證你的窗口將在任何合理的時間內關閉,或者由於強大的參考,你將有少量的控件在卸載後保持活動狀態?沒有,這就是爲什麼我們有弱事件模式。 – Will
你怎麼知道微軟實現了一個弱事件模式來完成這個任務(即使用某種WeakEventManager)? –
嗨,彼得,我在「WPF控制開發」(優秀的書) –