2016-03-17 58 views
1

我是wpf和mvvm概念的新手。這裏有一個tutorial我正在學習,但我不明白這部分; 在圖7:在這段代碼中做什麼+ =和 - =?

protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 

     MainWindow window = new MainWindow(); 

     // Create the ViewModel to which 
     // the main window binds. 
     string path = "Data/customers.xml"; 
     var viewModel = new MainWindowViewModel(path); 

     // When the ViewModel asks to be closed, 
     // close the window. 
     EventHandler handler = null; 
     handler = delegate 
     { 
      viewModel.RequestClose -= handler; 
      window.Close(); 
     }; 
     viewModel.RequestClose += handler; 

     // Allow all controls in the window to 
     // bind to the ViewModel by setting the 
     // DataContext, which propagates down 
     // the element tree. 
     window.DataContext = viewModel; 

     window.Show(); 
    } 

什麼是viewModel.RequestClose -= handler;viewModel.RequestClose += handler;在做什麼?

回答

7

viewModel.RequestClose += handler;EventHandler添加到RequestClose事件中。 -=將其刪除。

請注意,刪除它是作爲一個清理完成的,因爲它看起來像處理程序中完成的下一件事是關閉窗口。

MainWindowViewModel是發佈名爲RequestClose的事件的對象。您的代碼正在訂閱該事件。你的代碼想要在事件被觸發時處理。您可以通過使用+=向事件添加處理程序來完成此操作。當你這樣做,並且MainWindowViewModel實例觸發事件時,你的處理程序運行。事件允許對象之間的一種分離形式的通信。它看起來像你的處理程序也將關閉窗口,所以它通過從事件中刪除處理程序進行進一步操作,使用-=

查看MSDN活動文檔。

事件使類或對象在感興趣的事情發生時通知其他類或對象。發送(或引發)事件的類稱爲發佈者,接收(或處理)事件的類稱爲訂閱者。

+1

具體而言,+ =基本上意味着,保持左側的對象的原始內容,並追加右側的事情, - =表示保持事物的內容在左邊,除了右邊的東西,它是var1 = var1 + var2的快捷方式。 –

+0

嗨,謝謝。但我無法理解代碼。你能解釋一下嗎?什麼是RequestClose以及爲什麼它向其添加事件處理程序? – Saeid

+0

@AldenBe:我已經知道了。但我不明白它如何與事件處理程序一起工作。 – Saeid

1

想想EventHandler就像一組功能,當一個事件發生時會被執行。

Market.SoldEvent += StockRemovalEvent; 
Market.SoldEvent += PaymentReceivedEvent; 

if(Market.SoldOut) 
{ 
    // we don't need it anymore. 
    Market.SoldEvent -= StockRemovalEvent; 
} 

參考鏈接:https://msdn.microsoft.com/en-us/library/ms366768.aspx

+0

謝謝,我將不勝感激你的任何鏈接或資源,你可以提供進一步的研究。 – Saeid

+0

我已經更新了我的答案。 –