Как использовать текст перенаправленной команды в качестве содержимого кнопки

У меня есть кнопка в представлении, которое связано через RoutedUICommand с командой, определенной в ViewModel.

Отрывок кода XAML из представления:

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

В CodeBehind представления я добавляю привязку команды из ViewModel в коллекцию привязок представления:

this.CommandBindings.Add( viewModel.LoginCommandBinding );

Сама ViewModel реализует команду:

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

Таким образом, команда была определена с текстом и именем обоих "Логин". Сама кнопка имеет контент "Логин". Есть ли способ использовать текст команды в качестве содержимого кнопки?

4 ответа

Решение

Просто свяжите свойство Name или Text в команде, например так:

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

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

Вы можете получить текст команды динамически для каждой кнопки.

Поместите это в свой файл 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>

От...

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

Хороший способ добиться этого - привязать его обратно, используя расширение разметки RelativeSource, например: Command="Cmds:MyCommands.TestCmd" Content="{Binding RelativeSource={RelativeSource Self}, Path=Command.Text}"

У меня нет инфраструктуры, чтобы проверить это прямо сейчас, но мой сувенир этой проблемы заключается в том, что кнопка должна автоматически использовать текст RoutedUICommand в качестве своего содержимого.

Вы пытались удалить свойство Content?

Другие вопросы по тегам