Można tworzyć i wystawiać konwertera poprzez zwyczaju MarkupExtension
które dadzą Ci deklarację inline szukasz:
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);
}
}
Teraz można użyć inline MarkupExtension aby utworzyć nowy konwerter:
<Button Visibility="{Binding Converter={local:BooleanToVisibilityConverter} ...}" .. />
i chociaż nie pokazuję tego w moim przykładzie, prawdopodobnie chciałbyś, aby wewnętrzny konwerter był statyczny, tak aby każde rozszerzenie nie tworzyło nowego wystąpienia wewnętrznego konwertera – sellmeadog
Cool! W połączeniu z ogólną składnią 'ValueConverter' i konstruktorami parametrów markup (do przekazania na przykład boolowskiego argumentu NOT) będzie to bardzo dobre rozwiązanie. –
Poma