Je suis un peu confus au sujet de ICommand et RelayCommandQuand utiliser ICommand enveloppé avec RelayCommand et quand utiliser Just ReplayCommand?
Si je le fais sur un contrôle de saisie semi-automatique
public RelayCommand<KeyEventArgs> AutoCompleteCommand
{
get;
private set;
}
public MyConstructor()
{
AutoCompleteCommand = new RelayCommand<KeyEventArgs>((e) =>
{
//Check if the key pressed is <Enter>
//if it is, check also if the SearchPropertyValue is not String.Empty then
var d = e;
//Should it return true or false?
});
}
Dans le XAML:
<toolkit:AutoCompleteBox x:Name="acbStore" Margin="154,196,29,0" VerticalAlignment="Top" RenderTransformOrigin="0.6,0.083" Height="162"/>
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyDown">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding AutoCompleteCommand, Mode=OneWay}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
Rien ne se passe.
Si je fais
public ICommand AutoComplete
{
get
{
return new RelayCommand<KeyEventArgs>(e =>
{
var key = e.Key;
});
}
}
Dans le XAML:
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyDown">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding AutoComplete, Mode=OneWay}"
PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<toolkit:AutoCompleteBox x:Name="acbStore" Margin="154,196,29,0"
VerticalAlignment="Top" RenderTransformOrigin="0.6,0.083" Height="162"/>
Il fonctionne et ma commande est déclenchée.
De tous les exemples que j'ai vus, RelayCommand semble toujours aller dans le constructeur. Puis-je le coller ailleurs car cela va rendre le constructeur très encombré.
Vous ne liez pas la commande dans votre premier échantillon afin qu'il ne se déclenche pas. Que vous utilisiez 'ICommand' ou' RelayCommand <> 'vous devez toujours le lier dans votre xaml. –
RelayCommand est un objet comme les autres. Vous pouvez l'instancier où vous voulez, mais il doit être instancié, et il doit être lié à votre XAML quelque part. – LBugnion
@AlaaMasoud - Désolé, il est effectivement là mais je suppose que je ne l'ai pas mis en évidence avec le "formateur de code" donc il n'a pas été montré. – chobo2