Как использовать текст перенаправленной команды в качестве содержимого кнопки - PullRequest
5 голосов
/ 22 сентября 2010

У меня есть кнопка в представлении, которое связано через 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 ]

14 голосов
/ 19 июня 2012

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

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

5 голосов
/ 13 января 2012

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

3 голосов
/ 22 сентября 2010

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

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

        <Button x:Name="btnText"
                Command="{Binding ThisIsMyCommand}"
                Content="{Binding ThisIsMyCommand.Text}" />
0 голосов
/ 22 сентября 2010

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

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

...