我正在查看以下xaml:
<Grid x:Name="LayoutRoot" Background="White">
<Button Content="Say Hello..." VerticalAlignment="Center"
HorizontalAlignment="Center"
my:ButtonService.Command="{Binding Path=SayHello}"
my:ButtonService.CommandParameter="Bob"/>
</Grid>
我想了解命令如何绑定,后面没有代码。 [my:] 指向定义[ ButtonService ]静态类的dll,后者又将[ CommandProperty ]定义为 DependencyProperty
我希望这是后面代码的一部分,而实际上它是在自己的类中 - ButtonService。
有人可以向我解释它是如何(以及为什么)有效吗?
完整代码为here:
答案 0 :(得分:2)
ButtonService类将具有一种称为“AttachedProperty”的特殊形式的Dependency属性。为此属性分配值时,将执行此依赖项属性的元数据定义的回调。
它在ButtonService
类中的这个回调代码将执行所有连接到Button click事件和所提供的CanExecuteChanged
值的ICommand
事件。
这个“命令”模式的重点是避免将代码放在代码隐藏中。执行某些处理并确定何时可以进行这种处理的代码被推回到被绑定的数据对象(通常称为“ViewModel”)。目的是创建一个更可测试的代码,因为它更容易测试没有UI的代码。
请注意,如果您使用的是Silverlight 4,则Command
和CommandParameter
现在由Button
实施,因此SL 4中不需要此服务。