2010-01-19 8 views
5

He estado buscando para este desbordamiento de pila, pero no podía encontrar una respuesta a esto aún así que espero que este no es un duplicado ...patrón MVVM - ¿Cómo puedo activar una ICommand o CommandReference en el código detrás

Tengo una aplicación que usa el patrón MVVM, me gusta mantener las cosas limpias, pero a veces un pequeño código detrás parece más limpio que la solución XAML.

Quiero saber si es posible activar un comando desde el código subyacente.

He establecido una referencia de comandos en mi opinión ya (véase más adelante)

<local:CommandReference 
       x:Key="CommandReferencePreviewReportsCommand" 
       Command="{Binding PreviewReportsCommand}" /> 

Lo que quiero hacer es ser capaz de desencadenar la referencia de comandos o la ICommand a partir del código C# detrás de la vista . ¿Alguien sabe como hacer esto?

Respuesta

5

Usted sólo puede invocar el comando desde el código subyacente:

var parameter = null; // can also be any object you'd like to use as a parameter 
this.PreviewReportsCommand.Execute(parameter); 
+0

Gracias Marcos, pero esto no parece funcionar. ¿Deseo invocar el comando desde el código subyacente de la vista, que no parece poder "ver" este comando? Asumiría que este código funcionaría bien si lo coloco bajo ViewModel ... pero necesito algo a lo que acceder detrás de la vista. –

+0

Gracias Mark ... Había un pequeño ajuste que tenía que hacer para ponerlo en funcionamiento ... pero me puso en el camino correcto. –

+0

Veo que lo conseguiste funcionando - bien :) No estaba del todo claro para mí desde qué archivo de código subyacente necesitabas hacer esto. –

3

bien ... Marcos Seemann - Usted me fuera en el camino correcto ... así que aumenté su voto ...

No me di cuenta de que el contexto de datos podría ser de tipo moldeado, lo que haría visibles los comandos en ViewModel ... por lo que el código siguiente funciona para mi situación ... y una solución genérica sería similar.

((ViewModel.PrintSelectViewModel) this.DataContext).PreviewReportsCommand.Execute(null); 
Cuestiones relacionadas