L'événement RaiseCanExecuteChanged ne Codez comme suit (Gardez à l'esprit que cette implémentation d'ICommand n'est pas efficace, mais fonctionne comme un charme):
Il existe une telle implémentation pour chaque interaction de l'interface utilisateur pour actualiser les gestionnaires canExecute pour l'événement RequerySuggested.
public class Command<TArgs> : ICommand
{
public Command(Action<TArgs> exDelegate)
{
_exDelegate = exDelegate;
}
public Command(Action<TArgs> exDelegate, Func<TArgs, bool> canDelegate)
{
_exDelegate = exDelegate;
_canDelegate = canDelegate;
}
protected Action<TArgs> _exDelegate;
protected Func<TArgs, bool> _canDelegate;
#region ICommand Members
public bool CanExecute(TArgs parameter)
{
if (_canDelegate == null)
return true;
return _canDelegate(parameter);
}
public void Execute(TArgs parameter)
{
if (_exDelegate != null)
{
_exDelegate(parameter);
}
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
bool ICommand.CanExecute(object parameter)
{
if (parameter != null)
{
var parameterType = parameter.GetType();
if (parameterType.FullName.Equals("MS.Internal.NamedObject"))
return false;
}
return CanExecute((TArgs)parameter);
}
void ICommand.Execute(object parameter)
{
Execute((TArgs)parameter);
}
#endregion
}
Merci, fonctionne très bien. Où puis-je trouver des informations sur le principe principal du fonctionnement de ces commandes? Surtout, à propos de MS.Internal.NamedObject – Alex
Je suggère de regarder dans les bibliothèques MSDN. Je n'ai pas de lien direct cependant. Cette implémentation est assez ancienne, dans un jour où WPF vient d'atteindre la lumière du jour :) –