gpt4 book ai didi

wpf - MVVM RelayCommand 可以执行

转载 作者:行者123 更新时间:2023-12-04 09:35:53 26 4
gpt4 key购买 nike

我正在实现一个带有执行和 canExecute 部分的 RelayCommand。 RelayCommand 在没有 canExecute 部分时工作,但是当我添加 canExecute 部分时,命令会锁定按钮。 RelayCommand 只检查按钮是否可以执行,只要 CanExecute 部分为真。一旦 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; }

最佳答案

由于在 .NET 4.5 更新后 CommandManager 不再触发可执行检查,因此 MVVMLight 出现了中断。这已经解决了。您应该使用 GalaSoft.MvvmLight.CommandWpf 命名空间,而不是包含 GalaSoft.MvvmLight.Command 命名空间。该命名空间中定义的 RelayCommand 仍在检查您传递给该命令的 CanExecute 函数。

我花了大约一天的时间来找出我的应用程序到底出了什么问题。我希望这会对你们中的一些人有所帮助。

Here是开发人员的博客文章,解释了为什么这是必要的。

关于wpf - MVVM RelayCommand 可以执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19364364/

26 4 0