Вот еще один подход, в котором вы определяете свои собственные расширения разметки, которые возвращают True
или False
(или любое другое значение, которое вы пожелаете). Затем вы просто используете их прямо в XAML, как и любое другое расширение разметки:
public class TrueExtension : MarkupExtension {
public override object ProvideValue(IServiceProvider serviceProvider) => true;
}
public class FalseExtension : MarkupExtension {
public override object ProvideValue(IServiceProvider serviceProvider) => false;
}
public class DoubleExtension : MarkupExtension {
public DoubleExtension(){};
public DoubleExtension(double value) => Value = value;
public double Value { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider) => Value;
}
Затем вы используете их следующим образом (при условии, что ваше импортированное пространство имен равно mx
):
<KeyBinding Key="Enter"
Command="{Binding ReturnResultCommand}"
CommandParameter="{mx:True}" />
<Button Visibility="{Binding SomeProperty,
Converter={SomeBoolConverter},
ConverterParameter={mx:True}}">
<!-- This guarantees the value passed is a double equal to 42.5 -->
<Button Visibility="{Binding SomeProperty,
Converter={SomeDoubleConverter},
ConverterParameter={mx:Double 42.5}}">
Я на самом деле определяю множество пользовательских MarkupExtension
классов для множества общих вещей, которые я не хочу хранить в своих ресурсах.