1

可能重复:
用户界面何时与命令分离?

出于测试目的,我创建了包含 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 部分。它永远不会停止调用可以执行。每次我打开窗口时,它都会添加另一个执行。因此,当我多次打开窗口时,它会增加执行此代码。即使窗口被卸载,它也不会停止执行。

我该如何阻止这种行为,因为它会导致应用程序稳定性和内存使用以及性能方面的严重问题。

4

0 回答 0