这段代码中有+ =和 - =做什么?

时间:2016-03-17 20:55:15

标签: c#

我是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;在做什么?

3 个答案:

答案 0 :(得分:7)

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

请注意,删除它是作为清理完成的,因为在处理程序中完成的下一步操作就是关闭窗口。

MainWindowViewModel是一个发布名为RequestClose的事件的对象。您的代码正在订阅该活动。您的代码想要在触发该事件时进行处理。您可以使用+=为事件添加处理程序。当您这样做,并且MainWindowViewModel实例触发事件时,您的处理程序将运行。事件允许对象之间的一种解耦形式的通信。看起来您的处理程序也将关闭窗口,因此需要通过-=从事件中删除处理程序来进行进一步的清理操作。

请参阅活动的MSDN文档。

  

事件使类或对象能够在出现感兴趣的内容时通知其他类或对象。发送(或引发)事件的类称为发布者,接收(或处理)事件的类称为订阅者。

答案 1 :(得分:1)

订阅和取消订阅活动。

viewModel.RequestClose += handler;表示每当引发RequestClose事件时,都会调用在handler中定义的委托。

viewModel.RequestClose -= handler取消订阅

请参阅https://msdn.microsoft.com/en-us/library/ms366768.aspx#Anchor_0

答案 2 :(得分: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