获取非UI对象以响应WPF命令绑定

Eig*_*ite 2 wpf command

我有一个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;
    }
Run Code Online (Sandbox Code Playgroud)

标记是 -

<Button Command="Refresh">refresh</Button>
Run Code Online (Sandbox Code Playgroud)

现在,我已尝试在此按钮上设置CommandTarget,{Binding Source={StaticResource ViewModel}}但我得到运行时说Cannot convert the value in attribute 'CommandTarget' to object of type 'System.Windows.IInputElement'.

我是命令的新手,所以我完全可能在这里犯了各种各样的错误.任何帮助,将不胜感激.

Ken*_*art 5

RoutedCommands和MVVM不混合.RoutedCommands绑定到可视树并​​依赖于WPF的CommandBindings集合.您应该实现自己的ICommand使用MVVM模式的类.看一下Prism的初学者实现.

在我自己的MVVM项目中,我有几个命令实现:

  • DelegateCommand.调用提供了委托,以确定命令是否可以执行,以及执行命令.
  • ActiveAwareCommand.与interface(IActiveAware)一起使用,并将命令执行发送到当前活动的项目.多个主动感知实现使用该命令注册自己,并且该命令自动路由CanExecute/ Execute调用当前活动的项目.