2010-09-17 4 views
0

Je regarde le XAML suivant:Commande Silverlight Reliure

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

Je voudrais comprendre comment la commande se lie sans code derrière. [ma:] pointe vers une dll qui définit un [ButtonService] classe statique qui définit à son tour [CommandProperty] comme DependencyProperty.

Je m'attendais à ce que cela fasse partie du code derrière alors qu'en fait c'est dans sa propre classe - ButtonService. Est-ce que quelqu'un peut m'expliquer comment (et pourquoi) cela fonctionne-t-il?

Le code complet est here:

Répondre

2

La classe ButtonService aura une forme particulière de la propriété de dépendance appelée « AttachedProperty ». Lorsqu'une valeur est affectée à cette propriété, le rappel défini par les métadonnées pour cette propriété de dépendance sera exécuté.

Son ce code de rappel dans la classe ButtonService qui fera tout le câblage jusqu'à l'événement de clic de bouton et l'événement CanExecuteChanged de la valeur ICommand fournie.

Le but de ce modèle de "Commande" est d'éviter de placer du code dans le code-behind. Code pour effectuer un traitement et pour déterminer quand un tel traitement peut être fait est repoussé dans l'objet de données (souvent appelé "ViewModel") étant lié. Le but est de créer un code plus testable depuis son code beaucoup plus facile à tester qui n'a pas d'interface utilisateur.

Notez que si vous travaillez avec Silverlight 4 puis Command et CommandParameter sont maintenant mises en œuvre par Button donc il n'y a pas besoin de ce service dans SL 4.

+0

Merci AnthonyWJones - vous avez raison sur le recâblage du clic , mais je ne comprends toujours pas comment on peut placer, au milieu de la partie XAML des déclarations du bouton, ce 'my: ServiceButton.Command' qui ne fait pas partie du bouton. – furd