2

ボタンから起動される組み込みのRefreshコマンドに応答したいViewModelクラスがありますが、CommandTargetを宣言する方法がわかりません。

簡単に言えば、私のコードは次のとおりです

ViewModelコンストラクターとCanExecuteおよびExecutedイベントハンドラー-

    public ViewModel()
    {
        CommandBinding binding = new CommandBinding(NavigationCommands.Refresh, CommandHandler);
        binding.CanExecute += new CanExecuteRoutedEventHandler(binding_CanExecute);
        binding.Executed += new ExecutedRoutedEventHandler(binding_Executed);
        CommandManager.RegisterClassCommandBinding(typeof(ViewModel), binding);
    }
    void binding_Executed(object sender, ExecutedRoutedEventArgs e)
    {
        Debug.Print("Refreshing...");
    }

    void binding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
    {
        e.CanExecute = true;
    }

マークアップは-

<Button Command="Refresh">refresh</Button>

ここで、このボタンのCommandTargetをに設定しようとしました{Binding Source={StaticResource ViewModel}}が、ランタイムに「」と表示されますCannot convert the value in attribute 'CommandTarget' to object of type 'System.Windows.IInputElement'

私はコマンドに慣れていないので、ここですべての種類が間違っている可能性があります。任意の助けをいただければ幸いです。

4

1 に答える 1

5

RoutedCommands と MVVM は混在しません。s はビジュアル ツリーに結び付けられ、WPF のコレクションRoutedCommandに依存します。MVVM パターンで動作する独自のクラスをCommandBindings実装する必要があります。手始めにPrism の実装ICommandを見てみましょう。

私自身の MVVM プロジェクトには、コマンドの実装がいくつかあります。

  • DelegateCommand. 指定されたデリゲートを呼び出して、コマンドを実行できるかどうかを判断し、コマンドを実行します。
  • ActiveAwareCommand. インターフェイス ( IActiveAware) と連携して動作し、コマンドの実行を現在アクティブなアイテムに送信します。複数のアクティブな認識実装がコマンドに登録され、コマンドは現在アクティブなアイテムに自動的にルーティングCanExecute/Execute呼び出しを行います。
于 2009-03-03T12:04:19.567 に答える