基本的に、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())));
}
}
誰かが私が犯している間違いを指摘できますか?