可能重复:
用户界面何时与命令分离?
出于测试目的,我创建了包含 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");
行来检查何时调用它,并且我意识到它不仅在焦点窗口上调用。即使WindowWithButton
是关闭的,它也被调用。所以,我按下按钮,然后我关闭WindowWithButton
并激活 MainWindow 并调用 CanExecute 部分。它永远不会停止调用可以执行。每次我打开窗口时,它都会添加另一个执行。因此,当我多次打开窗口时,它会增加执行此代码。即使窗口被卸载,它也不会停止执行。
我该如何阻止这种行为,因为它会导致应用程序稳定性和内存使用以及性能方面的严重问题。