Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generic IValueConverter C# WPF usage in XAML?

basically I used the posted Converter here and just changed the Datatype to be a generic. How do I use the generic Converter inside XAML?

public class ReverseListConverter<T> : MarkupExtension, IValueConverter
{
    public ReverseListConverter()
    {
    }

    private ObservableCollection<T> _reversedList;

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        _reversedList = new ObservableCollection<T>();

        var data = (ObservableCollection<T>)value;

        for (var i = data.Count - 1; i >= 0; i--)
            _reversedList.Add(data[i]);

        data.CollectionChanged += DataCollectionChanged;

        return _reversedList;
    }

    void DataCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        var data = (ObservableCollection<T>)sender;

        _reversedList.Clear();
        for (var i = data.Count - 1; i >= 0; i--)
            _reversedList.Add(data[i]);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

Before the Converter was generic I just used

ItemsSource="{Binding Mails, Converter={tools:ReverseListConverter}}"

Is there a way to do this with a generic Converter in XAML?

like image 360
metacircle Avatar asked Oct 19 '25 18:10

metacircle


1 Answers

You can forget about making a generic converter a markup extension, you cannot simply create generic objects in XAML (there are some cases in which you can in .NET 4, don't know if anything changed in 4.5).

One way to create an instance would be using a helper class which contructs an instance for you (i wrote one in another question's answer).

like image 58
H.B. Avatar answered Oct 22 '25 09:10

H.B.



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!