2010-09-22 5 views
5

J'ai un bouton sur une vue reliée par une commande RoutedUICommand à une commande définie dans le ViewModel.Comment utiliser le texte d'une commande routée en tant que contenu de bouton

L'extrait de code XAML de la vue:

<Button Content="Login" Command="{Binding Login}" /> 

Dans la codebehind Voir ajouter la commande de liaison de la ViewModel à la collection de liaison de la vue:

this.CommandBindings.Add(viewModel.LoginCommandBinding); 

Le ViewModel elle-même implémente la commande :

public class LoginViewModel:ViewModelBase 
{ 

    public ICommand Login { get; private set; } 
    public CommandBinding LoginCommandBinding { get; private set; } 

    public LoginViewModel() { 
     this.Login = 
      new RoutedUICommand("Login", "Login", typeof(Window)); 
     this.LoginCommandBinding = 
      new CommandBinding(Login, LoginCommandHandler, CanExecuteHandler); 
    } 

    void LoginCommandHandler(object sender, ExecutedRoutedEventArgs e) { 
     //Put code here 
    } 

    void CanExecuteHandler(object sender, CanExecuteRoutedEventArgs e) { 
     return true; 
    } 
} 

Ainsi, la commande a été définie avec le texte et na moi deux "Login". Le bouton lui-même a le contenu "Login". Est-il possible d'utiliser le texte de la commande comme contenu du bouton?

Répondre

3

Il suffit de se lier au nom ou à la propriété Text dans la commande, comme ceci:

 <Button x:Name="btnName" 
       Command="{Binding ThisIsMyCommand}" 
       Content="{Binding ThisIsMyCommand.Name}" /> 

     <Button x:Name="btnText" 
       Command="{Binding ThisIsMyCommand}" 
       Content="{Binding ThisIsMyCommand.Text}" /> 
0

Je n'ai pas l'infrastructure nécessaire pour tester ce moment, mais mon souvenir de ce problème est que le bouton doit utilise automatiquement le texte RoutedUICommand comme contenu.

Avez-vous essayé de supprimer la propriété Content?

+0

Oui, je l'ai entendu dire que cela devrait fonctionner. C'est la raison pour laquelle je demande. Et non, supprimer la propriété Content du code xaml ne fait pas l'affaire. Le bouton reste vide. – PVitt

+0

OK, désolé, il m'a vraiment semblé une question trop facile ... – Timores

5

Une bonne façon d'y parvenir est de se lier en arrière en utilisant l'extension de balisage RelativeSource par exemple, Command="Cmds:MyCommands.TestCmd" Content="{Binding RelativeSource={RelativeSource Self}, Path=Command.Text}"

+0

Ceci est plus réutilisable. Merci. –

12

Vous pouvez obtenir le texte de commande dynamique pour chaque bouton.

Mettez cela dans votre fichier Application.xaml.

<Style TargetType="Button"> 
    <!--Default Button content to be the Text provided from the Command.--> 
    <Setter Property="Content" 
      Value="{Binding RelativeSource={RelativeSource Self}, 
      Path=Command.Text}"/> 
</Style> 

... De

http://leecampbell.blogspot.com/2008/12/wpf-commandtext.html

Questions connexes