Pergunta

Eu tenho um formulário de dados em SL3 que usa Prismas Comandos com comportamento anexado para capturar eventos.

(É bastante firmemente segue este post: http://blogs.southworks.net/dschenkelman/2009/04/18/commands-with-attached-behavior-for-silverlight-3-dataform/#comment-607 )

Basicamente, é tudo ligado e funcionando bem, porém no viewmodel, eu não posso ver como eu posso acessar os argumentos de eventos para o evento.

No construtor da VM I definir o comando delegado:

this.EditEnded = new DelegateCommand<object>(o => {
    //how can I tell if the button clicked was cancel or save?
}

Mas eu necessitem de acesso a propriedade DataFormItemEditEndedEventArgs para que eu possa definir o que precisa ser feito? Eu quero executar ações diferentes, dependendo se o usuário cancelada ou comprometido.

Foi útil?

Solução

Para obter o parâmetro de volta, você pode editar o seu derivado classe CommandBehaviorBase assim:

private void ItemEditEnded(object sender, DataFormItemEditEndedEventArgs e)
{
     this.CommandParameter = e.EditAction;
     ExecuteCommand();
}

Este iria enviar o editAction (ou o que você quiser) à CommandDelegate. Neste caso, você não adicionar uma propriedade anexada para o parâmetro. Editar sua classe anexado a propriedade de forma adequada (deixar de fora o CommandParameter). Eu não estou apaixonado por esta abordagem (parece meio fora do padrão), e gostaria de saber se alguém tem uma sugestão alternativa.

Quer dizer, você pode sempre adicionar eventos para os diferentes tipos de eventos (um para cometer, etc.), e isso é um pouco mais puro, mas isso significaria um monte de código extra. Você poderia fugir com ele neste caso, mas para outros eventos, que se tornaria impossível (comunicação coordenadas do mouse ou algo ridículo).

vídeo sobre Prism Comandos . lida com parâmetros mais estáticas Consulte a seção "Parâmetros do Comando" para saber como resolver os métodos baseados uma propriedade estática em anexo.

<Button Content="Save"
        HorizontalAlignment="Center"
        VerticalAlignment="Bottom"
        cal:Click.Command="{Binding GetCompanyData}"
        cal:Click.CommandParameter="SaveButton"
        />

Outras dicas

Talvez você deve declarar Comandos distintas (Salvar Comando e Anular comando) para os botões e ações separadas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top