J'utilise ce code pour faire une commande simple:WPF SimpleCommand possible avec les génériques?
public class SimpleCommand : ICommand
{
public Predicate<object> CanExecuteDelegate { get; set; }
public Action<object> ExecuteDelegate { get; set; }
#region ICommand Members
public bool CanExecute(object parameter)
{
if (CanExecuteDelegate != null)
return CanExecuteDelegate(parameter);
return true;// if there is no can execute default to true
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
if (ExecuteDelegate != null)
ExecuteDelegate(parameter);
}
#endregion
}
Je n'ai pas écrit cela. Mais j'aime l'utiliser. Quand je l'utilise, il finit par être comme ceci:
// This is the value that gets set to the command in the UI
public SimpleCommand DoSomethingCommand { get; set; }
public DoSomethingCommandConstructor()
{
DoSomethingCommand = new SimpleCommand
{
ExecuteDelegate = x => RunCommand(x)
};
}
private void RunCommand(object o)
{
// Run the command.
}
Le seul problème est que le paramètre de RunCommand est un objet. Je pense que j'ai été gâté par les génériques. Je veux toujours que l'EDI/compilateur sache juste avec quel type de travail je travaille.
Est-il possible de changer cette classe SimpleCommand pour qu'elle soit implémentée en utilisant des génériques?
Merci pour la réponse et le point vers Prism. Je pense que c'est le lien que vous alliez me montrer: http://compositewpf.codeplex.com/SourceControl/changeset/view/48968#839830 – Vaccano