wpf xaml routed-commands

wpf - Parámetro de comando booleano en XAML



routed-commands (5)

Tengo este código (que funciona correctamente):

<KeyBinding Key="Enter" Command="{Binding ReturnResultCommand}"> <KeyBinding.CommandParameter> <s:Boolean> True </s:Boolean> </KeyBinding.CommandParameter> </KeyBinding>

Donde "s" es, por supuesto, el espacio de nombres del sistema.

Pero este comando se llama bastantes veces y realmente infla el código XAML de otra manera bastante simple. ¿Es esta la notación más corta del parámetro de comando booleano en XAML (aparte de dividir el comando en varios comandos)?


Acabo de encontrar una solución aún más genérica con esta extensión de marcado:

public class SystemTypeExtension : MarkupExtension { private object parameter; public int Int{set { parameter = value; }} public double Double { set { parameter = value; } } public float Float { set { parameter = value; } } public bool Bool { set { parameter = value; } } // add more as needed here public override object ProvideValue(IServiceProvider serviceProvider) { return parameter; } }

Uso ("wpf:" es el espacio de nombres donde vive la extensión):

<KeyBinding Key="F8" Command="{Binding SomeCommand}" CommandParameter="{wpf:SystemType Bool=True}"/>

¡Incluso tiene las opciones True y False después de tipear Bool= y escribe seguridad!


De alguna manera, tiendo a no leer las preguntas ... De todos modos, esto podría ser un poco un hack, pero puedes derivar de la clase KeyBinding :

public class BoolKeyBinding : KeyBinding { public bool Parameter { get { return (bool)CommandParameter; } set { CommandParameter = value; } } }

Uso:

<local:BoolKeyBinding ... Parameter="True"/>

Y otra solución no tan extraña:

xmlns:s="clr-namespace:System;assembly=mscorlib"

<Application.Resources> <!-- ... --> <s:Boolean x:Key="True">True</s:Boolean> <s:Boolean x:Key="False">False</s:Boolean> </Application.Resources>

Uso:

<KeyBinding ... CommandParameter="{StaticResource True}"/>


Lo más fácil es definir lo siguiente en los Recursos

<System:Boolean x:Key="FalseValue">False</System:Boolean> <System:Boolean x:Key="TrueValue">True</System:Boolean>

y úsalo como:

<Button CommandParameter="{StaticResource FalseValue}"/>


O tal vez eso:

<Button.CommandParameter> <s:Boolean>True</s:Boolean> </Button.CommandParameter>

Donde s es el espacio de nombres:

xmlns:s="clr-namespace:System;assembly=mscorlib"


Tal vez algo como

<KeyBinding Key="Enter" Command="{Binding ReturnResultCommand}" CommandParameter="{x:Static StaticBoolean.True}" />

donde está StaticBoolean

public static class StaticBoolean { public static bool True { get { return true; } } }