[MarkupExtensionReturnType(typeof(IValueConverter))]
public abstract class BaseValueConverter<TValueConverter> : MarkupExtension, IValueConverter
where TValueConverter : IValueConverter, new()
{
public abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture);
public abstract object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture);
public override object ProvideValue(IServiceProvider serviceProvider)
{
return new TValueConverter();
}
}
[MarkupExtensionReturnType(typeof(IMultiValueConverter))]
public abstract class BaseMultiValueConverter<TValueConverter> : MarkupExtension, IMultiValueConverter
where TValueConverter : IMultiValueConverter, new()
{
public abstract object Convert(object[] values, Type targetType, object parameter, CultureInfo culture);
public abstract object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture);
public override object ProvideValue(IServiceProvider serviceProvider)
{
return new TValueConverter();
}
}
Následně díky odděděné MarkupExtension můžete přímo odkazovat na nově vytvářenou instanci svého converteru v XAMLu takto:
<TextBox Text="{Binding Path=Value, Converter={conv:MyCustomConverter}" />
Při každém vyhodnocení bindingu se provolá metoda ProvideValue(...), která vrací novou instanci converteru.
Žádné komentáře:
Okomentovat