2017-10-09 8 views
1

WPF C#で閉じる、最大化、最小化を行っています。私は2つの異なる方法を試してみましたが、どちらも私と一緒に使えるように見えましたが、このアプローチの一般的なアプローチはこのアプローチの方が良いと考えています。コマンドバインディングまたはイベントハンドラをWPFで閉じる、最小化、最大化ボタンを実装するためのより良いアプローチですか?

方法一:XAMLで :

 private void CommandBinding_Executed_1(object sender, ExecutedRoutedEventArgs e) 
    { 
     SystemCommands.CloseWindow(this); 
    } 
    ... 

方法二:C#で

<Window.CommandBindings> 
    <CommandBinding Command="{x:Static SystemCommands.CloseWindowCommand}" CanExecute="CommandBinding_CanExecute_1" Executed="CommandBinding_Executed_1" /> 
    <CommandBinding ... /> 
    <CommandBinding ... /> 
</Window.CommandBindings> 
     <Button Command="{x:Static SystemCommands.CloseWindowCommand}" Content ="close"/> 
     <Button ... /> 
     <Button .../> 

XAMLで:C#で

<Button Content="X" Click="CloseButton_Click" /> 
<Button .../> 
<Button ... /> 

private void CloseButton_Click(object sender, RoutedEventArgs e) 
    { 
     Close(); 
    } 
    ... 
+0

"ベストプラクティス"は常に意見に基づいています。私の意見:Model-View-ViewModelパターンとデータバインディングの使用による第3のアプローチを検討してください。 [WPFの簡単なコマンド例](https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/commanding-overview#simple_command) – Fabio

+0

を参照してください。MVVMを使用している場合は)、 'Command'' Binding'を' ICommand'実装に使用してください。 –

答えて

1

通常、閉じる、最大化、最小化ボタンはコントロールの一部またはコントロールのテンプレートであるため、ボタンのClickイベントを直接処理できます。 Buttonのクリックをコントロール内で処理できるようにコマンドバインディングを導入する必要も、理由もありません。

あなたは、XAMLでイベントハンドラをフックできいずれか、または、ボタンがカスタムコントロールのControlTemplateで定義されている場合は、コントロールのOnApplyTemplate()メソッドをオーバーライドすることができ、ここで示唆したように、プログラムでイベントハンドラをフックアップ:https://blog.magnusmontin.net/2013/03/16/how-to-create-a-custom-window-in-wpf/

1

ボタンクリックハンドラは簡単で実装が簡単です。このボタンを使用してウィンドウを閉じるには、ハンドラをクリックするだけで十分です。しかし、ウィンドウを閉じるために複数の場所が必要になる可能性がある場合(たとえば、 "close"メニューオプションを使用する)、複数の場所に同じロジックを広げずにコマンドを使用する方がよいなぜなら、コマンドはすべて1つの場所で処理ロジックを持っているからです(あなたの場合はCommandBinding_Executed_1)。また、コマンドにはCanExecuteのロジックがあるので、ウィンドウをすぐに閉じることができない場合(このロジックを自分でコーディングしなければならないクリックハンドラで)、閉じるボタン(および他のすべての「閉じる」コントロール)を自動的に無効にすることができます。また、コマンドを使用すると、たとえそのコントロールにウィンドウへの参照がまったくない場合でも、ツリーの下の任意のコントロールからウィンドウを閉じることができます。これは一般的に "コマンド対クリックハンドラ"に当てはまりますが、上記のいくつかが少し厄介に見えるかもしれないウィンドウを閉じる場合は特にそうではありません。