2010-09-22 7 views
5

Ho un pulsante su una vista che è associata tramite RoutedUICommand a un comando definito nel ViewModel.Come utilizzare il testo di un comando indirizzato come contenuto del pulsante

Il codice XAML estratto dalla vista:

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

Nel CodeBehind della vista aggiungo il comando associazione dal ViewModel alla raccolta vincolante della vista:

this.CommandBindings.Add(viewModel.LoginCommandBinding); 

Il ViewModel si implementa il comando :

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

Quindi il comando è stato definito con il testo e na io sia "Login". Il pulsante stesso ha il contenuto "Login". C'è un modo per usare il testo del comando come contenuto del pulsante?

risposta

3

Basta associare alla proprietà Name o testo nel comando, in questo modo:

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

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

Non ho l'infrastruttura per testare questo proprio ora, ma il mio ricordo di questo problema è che il pulsante dovrebbe utilizzare automaticamente il testo RoutedUICommand come contenuto.

Hai provato a rimuovere la proprietà Contenuto?

+0

Sì, ho sentito dire che questo dovrebbe funzionare. Questa è la ragione per cui ti sto chiedendo. E no, rimuovere la proprietà Content dal codice xaml non fa il trucco. Il pulsante rimane vuoto. – PVitt

+0

OK, mi dispiace, mi è sembrata una domanda troppo facile ... – Timores

5

Un buon modo per raggiungere questo obiettivo è quello di legare nuovamente utilizzando l'estensione di markup RelativeSource esempio, Command="Cmds:MyCommands.TestCmd" Content="{Binding RelativeSource={RelativeSource Self}, Path=Command.Text}"

+0

Questo è più riutilizzabile. Grazie. –

12

È possibile ottenere il testo del comando in modo dinamico per ogni tasto.

Inserire questo nel file 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> 

Da ...

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

Problemi correlati