簡體   English   中英

何時在控件中分離事件處理程序?

[英]When do I detach event handlers in a control?

所以我有一個控件,該控件的面板將這些事件附加到面板的初始化事件中:

  gvvm = DataContext as GraphViewerViewModel;
  gvvm.ZoomToFitEvent += new EventHandler(_GraphViewerViewModel_ZoomToFitEvent);
  gvvm.ZoomInEvent += new EventHandler(_GraphViewerViewModel_ZoomInEvent);
  gvvm.ZoomOutEvent += new EventHandler(_GraphViewerViewModel_ZoomOutEvent);
  gvvm.CloseVCDEvent += new EventHandler(gvvm_CloseVCDEvent);
  gvvm.LoadVCDEvent += new EventHandler(gvvm_LoadVCDEvent);
  gvvm.ScrollToTimeEvent += new EventHandler<GraphViewerViewModel.ScrollToTimeEventArgs>(gvvm_ScrollToTimeEvent);

問題1.我應該何時分離事件? 是否適合在panel.unloaded中這樣做?

問題2.使用事件從視圖模型到視圖進行通信是否合適? 這似乎比創建property bool和基於propertychanged事件在面板中執行操作更合理,盡管這樣做的好處是不需要我訂閱/取消訂閱事件。 但是缺點是我必須考慮屬性事件切換的合理名稱。

問題1的答案是yeaaahhh,有點,Unloaded事件應該用於釋放資源。

但是,如果事件處理程序僅駐留在控件內部,並且您知道在運行時期間不會不斷從VisualTree中添加或刪除控件,則可以讓垃圾收集器為您完成這項工作。 意味着一旦沒有人將實例交給您控制,垃圾收集器將反正收集所有實例。

對問題2的回答:閱讀伯納德的講話。 View和ViewModel之間的通信不應存在。 但是,每次您設置Binding或使用INotifyPropertyChanged接口時,ViewModel都可能與View通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM