Pergunta

Eu tenho uma classe ViewModel que eu quero para responder à construído em comando Atualizar whic é disparado a partir de um botão, mas não tenho certeza de como declarar a CommandTarget.

Resumidamente, meu código é como abaixo

O construtor ViewModel e CanExecute e evento executado manipuladores -

    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;
    }

A marcação é -

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

Agora, eu tentei configurar o CommandTarget neste botão para {Binding Source={StaticResource ViewModel}} mas eu recebo um tempo de execução dizendo Cannot convert the value in attribute 'CommandTarget' to object of type 'System.Windows.IInputElement'.

Eu sou novo para comandos por isso é inteiramente possível que eu sou todos os tipos de errado aqui. AnyHelp seria apreciada.

Foi útil?

Solução

RoutedCommands e MVVM não se misturam. RoutedCommands são amarradas à árvore visual e de confiar na coleção CommandBindings do WPF. Você deve implementar suas próprias classes ICommand que o trabalho com o padrão MVVM. Dê uma olhada na implementações do prisma para começar.

Em meus próprios projetos MVVM, eu tenho um par de implementações de comando:

  • DelegateCommand. Chamadas fornecidas delegados para determinar se o comando pode executar, e para executar o comando.
  • ActiveAwareCommand. Trabalha em conjunto com uma interface (IActiveAware) e envia execuções de comando para o item atualmente ativo. Múltiplas implementações conscientes ativos registar-se com o comando eo comando automaticamente rotas CanExecute / chamadas Execute para o item atualmente ativo.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top