public class TransformedItemSource : DependencyObject, IEnumerable
{
public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register("ItemsSource", typeof(IEnumerable), typeof(TransformedItemSource), new PropertyMetadata(null));
public static readonly DependencyProperty ConverterProperty = DependencyProperty.Register("Converter", typeof(IValueConverter), typeof(TransformedItemSource), new PropertyMetadata(null));
public static readonly DependencyProperty ParameterProperty = DependencyProperty.Register("Parameter", typeof(Object), typeof(TransformedItemSource), new PropertyMetadata(null));
public static readonly DependencyProperty CultureProperty = DependencyProperty.Register("Culture", typeof(CultureInfo), typeof(TransformedItemSource), new PropertyMetadata(CultureInfo.CurrentCulture));
public static readonly DependencyProperty TargetTypeProperty = DependencyProperty.Register("TargetType", typeof(Type), typeof(TransformedItemSource), new PropertyMetadata(null));
public Type TargetType
{
get
{
return this.GetValue(TargetTypeProperty) as Type;
}
set
{
this.SetValue(TargetTypeProperty, value);
}
}
public Object Parameter
{
get
{
return this.GetValue(ParameterProperty);
}
set
{
this.SetValue(ParameterProperty, value);
}
}
public CultureInfo Culture
{
get
{
return this.GetValue(CultureProperty) as CultureInfo;
}
set
{
this.SetValue(CultureProperty, value);
}
}
public IEnumerable ItemsSource
{
get
{
return this.GetValue(ItemsSourceProperty) as IEnumerable;
}
set
{
this.SetValue(ItemsSourceProperty, value);
}
}
public IValueConverter Converter
{
get
{
return this.GetValue(ConverterProperty) as IValueConverter;
}
set
{
this.SetValue(ConverterProperty, value);
}
}
IEnumerator IEnumerable.GetEnumerator()
{
foreach (var current in this.ItemsSource ?? new Object[0])
{
var targetType = this.TargetType ?? ((current != null) ? current.GetType() : null);
yield return this.Converter.Convert(current, targetType, this.Parameter, this.Culture);
}
}
}