【发布时间】:2010-07-27 17:50:03
【问题描述】:
我正在使用这段代码来制作一个简单的命令:
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
}
这不是我写的。但我喜欢使用它。当我使用它时,它最终是这样的:
// 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.
}
唯一的问题是 RunCommand 的参数是一个对象。我想我已经被仿制药宠坏了。我总是希望 IDE/编译器只知道我正在使用的类型是什么而不进行强制转换。
是否可以将这个 SimpleCommand 类更改为使用泛型实现?
【问题讨论】: