是否有可能定義類型轉換器綁定內聯(無資源)?是否可以定義綁定內聯(無資源)的轉換器?
事情是這樣的:
<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