如何使用路由命令的文本作为按钮内容

时间:2010-09-22 13:09:55

标签: wpf xaml commandbinding

我在视图上有一个按钮,它通过RoutedUICommand绑定到ViewModel中定义的命令。

XAML代码摘自视图:

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

在View的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 个答案:

答案 0 :(得分:14)

您可以为每个按钮动态获取命令文本。

将它放在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

答案 1 :(得分:5)

实现此目的的一个好方法是使用RelativeSource标记扩展将其绑定回来,例如,Command="Cmds:MyCommands.TestCmd" Content="{Binding RelativeSource={RelativeSource Self}, Path=Command.Text}"

答案 2 :(得分:3)

只需绑定命令中的Name或Text属性,如下所示:

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

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

答案 3 :(得分:0)

我现在没有基础设施来测试这个,但我对这个问题的纪念是按钮应该自动使用RoutedUICommand文本作为其内容。

您是否尝试删除内容属性?