実行部分と canExecute 部分で RelayCommand を実装しています。RelayCommand は、canExecute 部分がなくても機能しますが、canExecute 部分を追加すると、コマンドがボタンをロックします。RelayCommand は、CanExecute 部分が true である限り、ボタンを実行できるかどうかのみをチェックします。canExecute 部分が false になると、ボタンをクリックする必要があってもクリックできなくなります。ボタンをクリックするたびに実行できるかどうかを制御し、実行できなくなったら永久にロックしないようにするにはどうすればよいですか?
RedoCommand = new RelayCommand(undoRedoController.Redo,undoRedoController.CanRedo);
public bool CanRedo()
{
redoStack.Count();
redoStack.Any();
return redoStack.Any();
}
public void Redo()
{
if (redoStack.Count() <= 0) throw new InvalidOperationException();
IUndoRedoCommand command = redoStack.Pop();
undoStack.Push(command);
command.Execute();
}
public class UndoRedoController
{
private static UndoRedoController controller = new UndoRedoController();
private readonly Stack<IUndoRedoCommand> undoStack = new Stack<IUndoRedoCommand>();
private readonly Stack<IUndoRedoCommand> redoStack = new Stack<IUndoRedoCommand>();
private UndoRedoController() { }
public static UndoRedoController GetInstance() { return controller; }