Логический CommandParameter в XAML
У меня есть этот код (который работает правильно):
<KeyBinding Key="Enter" Command="{Binding ReturnResultCommand}">
<KeyBinding.CommandParameter>
<s:Boolean>
True
</s:Boolean>
</KeyBinding.CommandParameter>
</KeyBinding>
где "s" - Это, конечно, системное пространство имен.
но эта команда вызывается довольно много раз, и она действительно раздувает в противном случае довольно простой код XAML. Это действительно самая короткая нотация логического параметра команды в XAML (кроме разделения команды на несколько команд)?
5 ответов:
Я как-то не склонен читать вопросы... В любом случае, это может быть немного хак, но вы можете получить от
KeyBinding
класс:public class BoolKeyBinding : KeyBinding { public bool Parameter { get { return (bool)CommandParameter; } set { CommandParameter = value; } } }
использование:
<local:BoolKeyBinding ... Parameter="True"/>
и еще одно не столь странное решение:
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>
использование:
<KeyBinding ... CommandParameter="{StaticResource True}"/>
проще всего определить следующее в ресурсах
<System:Boolean x:Key="FalseValue">False</System:Boolean> <System:Boolean x:Key="TrueValue">True</System:Boolean>
и использовать его как:
<Button CommandParameter="{StaticResource FalseValue}"/>
Я только что нашел еще более общее решение с этим расширением разметки:
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; } }
Usage ("wpf:" - это пространство имен, в котором находится расширение):
<KeyBinding Key="F8" Command="{Binding SomeCommand}" CommandParameter="{wpf:SystemType Bool=True}"/>
вы даже получаете варианты
True
иFalse
после вводаBool=
и тип безопасности!