匿名委托关闭窗口

3

我有一个可以通过按按钮启动的窗口。用户可以多次按此按钮以在该窗口中获取不同的结果(刷新结果)。我正在使用匿名委托来处理窗口的关闭,并将视图设置为null,以便可以再次创建它。如果我不这样做,窗口会被处理但仍然存在,因此我无法在已退出的窗口上调用Show()。以下是我的代码:

if (ResultsView == null) { ResultsView = new View.ResultsView(); }
//set the data context
ResultsView.DataContext = vm;

//this will close the window properly, so it can be recreated if needed.
EventHandler handler = null;
handler = delegate
{
    ResultsView.Closed -= handler;
    ResultsView = null;
};
ResultsView.Closed += handler;

//if the view is not loaded show it.
if (!ResultsView.IsLoaded)
{
     ResultsView.Owner = Application.Current.MainWindow;
     ResultsView.Show();
}

这段代码本来运行正常,但是如果结果窗口已经打开并且用户再次点击按钮以刷新结果视图,会出现问题。此时,当窗口关闭时,处理程序因某种原因变为空值,我尝试取消订阅关闭事件时会出现空异常。在查看代码时,处理程序似乎不为null

1个回答

3

当您创建新窗口时,只需添加新处理程序。在创建新窗口的 if 中包含声明处理程序的所有代码,直到添加处理程序为止。

如果不这样做,您将会再次向现有窗口添加处理程序。您不希望这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接