是否有可能定义类型转换器绑定内联(无资源)?是否可以定义绑定内联(无资源)的转换器?
事情是这样的:
<Button Visibility="{Binding ElementName=checkBox, Path=IsChecked, Converter={new BooleanToVisibilityConverter}" />
是否有可能定义类型转换器绑定内联(无资源)?是否可以定义绑定内联(无资源)的转换器?
事情是这样的:
<Button Visibility="{Binding ElementName=checkBox, Path=IsChecked, Converter={new BooleanToVisibilityConverter}" />
您可以创建并通过自定义MarkupExtension
这会给你你正在寻找的inline声明暴露你的转换器:
public class BooleanToVisibilityConverterExtension : MarkupExtension, IValueConverter
{
private BooleanToVisibilityConverter converter;
public BooleanToVisibilityCoverterExtension() : base()
{
this.converter = new BooleanToVisibilityConverter();
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return this.converter.Convert(value, targetType, parameter, culture);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return this.converter.ConvertBack(value, targetType, parameter, culture);
}
}
现在你可以使用内嵌的MarkupExtension创建一个新的转换器:
<Button Visibility="{Binding Converter={local:BooleanToVisibilityConverter} ...}" .. />
使用绑定语法是不可能的。但是,有可能使用元素语法:
<Button.Visibility>
<Binding ElementName="checkBox" Path=IsChecked>
<Binding.Converter>
<BooleanToVisibilityConverter />
</Binding.Converter>
</Binding>
</Button.Visibility>
但为什么你会想这样做?这意味着每个绑定实例都会创建一个新的转换器。从记忆的角度来看,这并不有效。
你可以做这样的事情。这应该工作。
伪:
public static class ConverterHost
{
public static readonly MyCoolConverter converter = new MyCoolConverter();
}
,并在XAML,somethign这样的:
{Binding Converter={x:Static conv:ConverterHost.converter }}
希望这有助于。
问候。
虽然我没有在我的示例中显示它,但您可能希望将内部转换器设置为静态,以便每个扩展都不会创建内部转换器的新实例 – sellmeadog
酷!结合通用的'ValueConverter'和标记构造函数参数语法(例如传递布尔非参数)将是非常好的解决方案。 –
Poma