1

重複
の可能性:UIはいつコマンドから切り離されますか?

テストの目的で、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)WindowWithButton1つのボタンが定義された単純なウィンドウです。

<Button Content="Button" HorizontalAlignment="Left" Margin="47,47,0,0" VerticalAlignment="Top" Width="75" Command="{Binding Path=Click, ElementName=clickWindow}"/>

ここclickWindowで、はウィンドウの名前です。

2番目のウィンドウでは、コマンドプロパティを次のように定義しています。

/// <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閉じていても呼ばれます。つまり、ボタンを押してから、MainWindowを閉じWindowWithButtonてアクティブにし、そのCanExecute部分が呼び出されます。実行可能な呼び出しを停止することはありません。ウィンドウを開くたびに、別の実行が追加されます。したがって、ウィンドウを何度も開くと、このコードの実行が増加します。ウィンドウがアンロードされても、実行は停止しませんでした。

この動作を停止するにはどうすればよいですか。アプリケーションの安定性とメモリ使用量、およびパフォーマンスに深刻な問題が発生する可能性があるためです。

4

0 に答える 0