Search code examples
wpfxamlcommandbinding

How to use the text of a routed command as button content


I have a button on a view that is bound via a RoutedUICommand to a command defined in the ViewModel.

The XAML code excerpt from the view:

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

In the View's CodeBehind I add the command binding from the ViewModel to the view's binding collection:

this.CommandBindings.Add( viewModel.LoginCommandBinding );

The ViewModel itself implements the command:

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

So the command was defined with the text and name both "Login". The button itself has the content "Login". Is there a way to use the command's text as the button's content?


Solution

  • Just bind to the Name or Text property in the command, like so:

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