私は今日、WPF プログラムでロジックを処理する方法の設計パターンを選択することについて誰かと話し、SO コミュニティが決定を容易にするためのさらなるアドバイスを提供してくれることを望んでいました。コマンドを支持する要因は、不便さを上回っていますか?
3 つのアプローチのうち最初の 2 つのUML ダイアグラムとともに完全なサンプルを用意しました。
- ボタンとメニューで Click イベント ハンドラーを使用します。
- XAML にバインドされたコマンドを使用します。
- コードにバインドされたコマンドを使用し、純粋な GUI レイアウトとスタイリングのために XAML を保持します。
彼が受講した入門コースや多くの書籍では、ロジックを UI オブジェクトに接続する自然な方法として単純な Click イベント ハンドラーが示されています。
彼は、コマンドを使用するために必要なオーバーヘッドの量に少し驚いていました。両方のコマンドがコード ビハインド ファイルで作成されています。
public static readonly ICommand cmdShow2 = new RoutedUICommand(
"Show Window2", "cmdShow2",
typeof(TestDespatchWindow));
次に、コマンドを識別してバインドする必要がある冗長な方法を使用して、XAML 内にさらに多くのコードを記述します。
<Window x:Class="WPFDispatchDemo.TestDespatchWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:w="clr-namespace:WPFDispatchDemo"..>
<Window.CommandBindings>
<CommandBinding Command="{x:Static w:TestDespatchWindow.cmdShow2}"
Executed="OnShow2" />
</Window.CommandBindings>
<DockPanel>
<StackPanel Margin="0,8,0,0">
<Button x:Name="Show2EventBased"
Margin="10,2,10,2"
Click="OnShow2"
Content="Show2 via WPF Event"/>
<Button x:Name="Show2Command"
Command="{x:Static w:TestDespatchWindow.cmdShow2}"
Margin="10,2,10,2"
Content="Show2 via WPF"/>
</StackPanel>
</DockPanel>
</Window>
私は (まだ) WPF の専門家であるとは言えないので、実際よりも複雑に描いているかもしれませんが、上記よりもはるかに単純化することはできないのではないかと疑っています。
編集:
DelegateCommand、RoutedCommand、および Eventの興味深い3 方向の比較を見つけました。