如果我在方法中定义一个变量,然后使用 Lambda 表达式订阅一个事件,并在该表达式的主体中使用该变量,那么引用是否仍然有效?我没有收到编译时错误,但它似乎也没有像我希望的那样工作。
看:
void OnAddAssignment()
{
var win = new View.NewTransportationView();
var vm = new NewTransportationViewModel(DateTime.Today);
vm.JobSaved += (s, e) => { win.Close(); };
win.DataContext = new ViewModel.NewTransportationViewModel(DateTime.Today);
win.WindowStartupLocation = WindowStartupLocation.CenterScreen;
win.Show();
}
注意:NewTransportationView
继承自System.Windows.Window
我希望当JobSaved
火灾发生时,窗口会关闭,并且我不必保存对NewTransportationView
外部方法的引用。
我意识到可能有许多其他方法可以解决这个问题,其中许多或大多数更优雅和高效,虽然我当然愿意看到建议,但我对 Lambda 的这个特定应用程序的一般行为和范围规则更感兴趣表达。
额外的问题:当我调用.Show()
它们时,我的 Window 对象在哪里?