我正在执行带有execute和canExecute部分的RelayCommand。 RelayCommand在没有canExecute部分的情况下工作,但是当我添加canExecute部分时,该命令锁定按钮。只要CanExecute部分为真,RelayCommand只检查是否可以执行该按钮。一旦canExecute部分变为false,即使应该按钮也不能再点击该按钮。我如何确保每次点击按钮时控制它是否可以执行,并且一旦无法执行就不会永久锁定它。MVVM RelayCommand CanExecute
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; }
你可以发布你正在使用的'RelayCommand'的实现吗? –
@RohitVats RelayCommand的实现,是按照如上所示执行的,还是你在谈论xaml parrt? – JonasN89
确保您使用CommandWPF名称空间,因为CommandCommandCanExecute在Command名称空间中被破坏。请参阅http://blog.jsinh.in/relay-command-canexecute-not-working-using-mvvmlight-toolkit-in-wpf/#.VYGoOvnmv30 – reggaeguitar