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