基本上,我为分配给 Window.CommandBindings 的命令本身设置了一个命令绑定:
<CommandBinding Command="local:TimerViewModel.AddTimer"
CanExecute="local:TimerViewModel.AddTimer_CanExecute"
Executed="local:TimerViewModel.AddTimer_Executed" />
local 是默认生成的命名空间,指向应用程序的命名空间。我在这里想要实现的是在 TimerViewModel 内进行命令处理,但我不断收到以下错误:
CanExecute="local:TimerViewModel.AddTimer_CanExecute" 无效。'local:TimerViewModel.AddTimer_CanExecute' 不是有效的事件处理程序方法名称。只有生成类或代码隐藏类的实例方法才有效。
TimerViewModel 虽然非常简单,但我相信我遗漏了一些东西:
public class TimerViewModel : ViewModelBase
{
public TimerViewModel()
{
_timers = new ObservableCollection<TimerModel>();
_addTimer = new RoutedUICommand("Add Timer", "AddTimer", GetType());
}
private ObservableCollection<TimerModel> _timers;
public ObservableCollection<TimerModel> Timers
{
get { return _timers; }
}
private static RoutedUICommand _addTimer;
public static RoutedUICommand AddTimer
{
get { return _addTimer; }
}
public void AddTimer_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
public void AddTimer_Executed(object sender, ExecutedRoutedEventArgs e)
{
_timers.Add(new TimerModel(TimeSpan.FromSeconds((new Random()).Next())));
}
}
谁能指出我犯的错误?