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