出于测试目的,我创建了包含2个窗口的简单应用程序:
a)MainWindow
按钮按以下方式定义:
<Button Content="Button" HorizontalAlignment="Left" Margin="53,36,0,0" VerticalAlignment="Top" Width="75" Click="HandlerButtonOnClick"/>
然后定义HandlerButtonOnClick
:
/// <summary>
/// The handler button on click.
/// </summary>
private void HandlerButtonOnClick(object sender, RoutedEventArgs e)
{
new WindowWithButton().ShowDialog();
}
b)WindowWithButton
是简单的窗口,其中定义了一个按钮:
<Button Content="Button" HorizontalAlignment="Left" Margin="47,47,0,0" VerticalAlignment="Top" Width="75" Command="{Binding Path=Click, ElementName=clickWindow}"/>
其中clickWindow
是窗口的名称。
在第二个窗口中,我有以下列方式定义的命令属性:
/// <summary>
/// The click.
/// </summary>
private ICommand click;
/// <summary>
/// Gets the click.
/// </summary>
public ICommand Click
{
get
{
return this.click ?? (this.click = new RelayCommand(
obj => MessageBox.Show("Click"),
obj =>
{
Debug.WriteLine("Click queried");
return true;
}));
}
}
我的问题如下。我已添加Debug.WriteLine("Click queried");
行来检查何时调用它,我意识到它不仅在Focus窗口上调用。即使WindowWithButton
已关闭,也会调用它。所以,我按下按钮,然后我关闭WindowWithButton
并激活MainWindow并调用CanExecute部分。它永远不会停止调用可以执行。每次我打开窗口,它都会增加另一个执行。因此,当我多次打开窗口时,它将增加执行此代码。即使窗口被卸载,它也不会停止执行。
如何阻止此行为,因为它可能导致应用程序稳定性和内存使用以及性能方面的严重问题。