今天我正在和某人谈论如何选择一种设计模式来处理他们的 WPF 程序中的逻辑,并希望 SO 社区可以提供进一步的建议以使决策更容易。哪些因素有利于命令胜过不便?
我准备了一个完整的示例以及三种方法中前两种的一些UML 图:
- 在按钮和菜单上使用 Click 事件处理程序。
- 使用 XAML 中绑定的命令。
- 使用代码中绑定的命令,并为纯 GUI 布局和样式保留 XAML。
他参加的入门课程和许多书籍都将简单的 Click 事件处理程序作为将逻辑连接到 UI 对象的自然方式。
他对使用命令所需的开销量感到有些震惊,而命令是在代码隐藏文件中创建的:
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 路比较。