【发布时间】:2010-10-08 04:23:14
【问题描述】:
我今天与某人讨论如何选择一种设计模式来处理他们的 WPF 程序中的逻辑,并希望 SO 社区可以提供进一步的建议以使决策更容易。 哪些因素有利于命令胜过不便?
我准备了一个完整的sample 以及一些UML diagrams 三种方法中的前两种:
- 在按钮和菜单上使用 Click 事件处理程序。
- 使用 XAML 中绑定的命令。
- 使用代码中绑定的命令,并保留 XAML 用于纯 GUI 布局和样式。
他参加的入门课程和许多书籍都将简单的 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-way comparison。
【问题讨论】:
-
“哪些因素有利于命令胜过不便?”对我来说似乎是一个问题。我认为背景的数量可能会让人们更容易看出我是认真的并理解上下文。
标签: wpf xaml routed-commands