2010-09-17 69 views
0

我在看下面的XAML代码:Silverlight的命令绑定

<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> 

我想明白是怎么得到的命令没有代码后面的约束。 [我:]点到DLL限定[ButtonService]静态类这反过来定义[CommandProperty]作为的DependencyProperty

我希望这是背后的代码的一部分,而事实上它是在它自己的类 - ButtonService。

有人可以向我解释它是如何工作的?

完整的代码here

回答

2

的ButtonService类将有依赖属性的一种特殊形式称为“AttachedProperty”。当一个值被分配给这个属性时,元数据为这个依赖属性定义的回调将被执行。

它在ButtonService类中的这个回调代码将完成所有接线到Button按钮事件和提供的ICommand值的CanExecuteChanged事件。

这个“命令”模式的要点是避免将代码放在代码隐藏中。执行某些处理并确定何时可以完成此类处理的代码会被推回到绑定的数据对象(通常称为“ViewModel”)中。其目的是创建更可测试的代码,因为它更容易测试没有UI的代码。

请注意,如果您正在使用Silverlight 4的工作,然后CommandCommandParameter现在由Button实现的,所以没有在SL需要此项服务的4

+0

谢谢AnthonyWJones - 你是对有关点击重新布线,但我仍然不明白,在按钮声明的XAML部分中间,这个'my:ServiceButton.Command'不是按钮的一部分。 – furd 2010-09-17 13:29:34