9

実行部分と 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; }
4

4 に答える 4

15

.NET 4.5 の更新後、CommandManager が実行可能チェックを起動しなくなったため、MVVMLight は中断されています。これはその後解決されました。GalaSoft.MvvmLight.Command 名前空間を含める代わりに、GalaSoft.MvvmLight.CommandWpf 名前空間を使用する必要があります。その名前空間で定義された RelayCommand は、コマンドに渡す CanExecute 関数をまだチェックしています。

私のアプリケーションで一体何がうまくいかなかったのかを見つけるのに約1日かかりました. これがあなたの何人かを助けることを願っています。

これが必要な理由を説明している開発者によるブログ投稿です。

于 2015-10-15T13:29:55.413 に答える