All streams
Search
Write a publication
Pull to refresh
0
0
Коробейщиков Иван Сергеевич @Shaddi

User

Send message
Если цель только уменьшить количество кода, можно делать так:
Базовый класс
public abstract class ConverterBase<T> : MarkupExtension, IValueConverter where T: class, new()
{
	private static T instance;
	
	static ConverterBase()
	{
		ConverterBase<T>.instance = Activator.CreateInstance<T>();
	}
	
	protected ConverterBase()
	{
	}
	
	public abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture);
	public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
	{
		throw new NotImplementedException();
	}
	
	public override object ProvideValue(IServiceProvider serviceProvider)
	{
		if (ConverterBase<T>.instance == null)
		{
			ConverterBase<T>.instance = Activator.CreateInstance<T>();
		}
		return ConverterBase<T>.instance;
	}
	
	public static T Instance
	{
		get
		{
			return ConverterBase<T>.instance;
		}
	}
}


Пример использования
internal class DelayToTimeSpanConverter : ConverterBase<DelayToTimeSpanConverter>
{
	public override object Convert(
		object value, Type targetType, object parameter, CultureInfo culture)
	{
		if (ReferenceEquals(value, null))
		{
			return DependencyProperty.UnsetValue;
		}

		return TimeSpan.FromMilliseconds(System.Convert.ToDouble(value));
	}
}


Разметка WPF
<TextBlock Text="{Binding Path=Span, Converter={conv:DelayToTimeSpanConverter}, StringFormat=hh\\:mm\\:ss}" />


Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity