2010-09-17 88 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