Cómo tener un valor de enumeración en CommandParam en XAML
-
29-09-2019 - |
Pregunta
Tengo el siguiente enumeración que representan un estado de interfaz de usuario (lo uso para activar y desactivar los elementos de interfaz de usuario):
enum Mode
{
EDIT, RUN, REVIEW
}
Me gustaría transmitir a Mode.EDIT mando en CommandParam:
<Button Grid.Column="6" VerticalAlignment="Top Command="{Binding Path=ChangeMode}"
CommandParameter="{StaticResource local:Mode.RUN}" />
Pero no tengo ni idea de cómo declararla. Como se puede ver en la declaración botón, trato de utilizar StaticResource pero fracasa. Soy bastante nuevo en SL4 y C #, así que supongo que me haya perdido algo.
Solución
Me han encontrado una solución. He creado en mi MyViewModel
(mi DataContext ) 3 atributos comunes (de tipo Mode) y inicializarlas en el constructor (con valores editar , EJECUTAR , REVIEW ). A continuación, los he atado en XAML como una propiedad normal de un DataContext
:
CommandParameter="{Binding Path=EDIT}
class MyViewModel
{
public Mode EDIT {set; get;}
public Mode RUN {set; get;}
public Mode REVIEW {set; get;}
MyViewModel()
{
EDIT = Mode.EDIT;
...
}
}
Otros consejos
En WPF podemos hacer algo como esto (podría no funcionar en SL) -
<Button Grid.Column="6" Command="{Binding Path=ChangeMode}"
CommandParameter="{x:Static local:Mode.RUN}" />
comprobar esta pregunta para más detalles - Pasar un valor de enumeración como parámetro de comando de XAML
en Silverlight x: hace estático no funcionaba, así que podemos hacer algo como esto:
<Button Command="{Binding Path=ChangeMode}">
<Button.CommandParameter>
<Mode>RUN</Mode>
</Button.CommandParameter>
</Button>