XAML中的通用IValueConverter C#WPF用法?

met*_*cle 1 c# generics wpf xaml ivalueconverter

基本上我在这里使用了发布的转换器,只是将数据类型更改为通用.如何在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

转换器是通用的之前我刚刚使用过

ItemsSource="{Binding Mails, Converter={tools:ReverseListConverter}}"
Run Code Online (Sandbox Code Playgroud)

有没有办法在XAML中使用通用转换器?

H.B*_*.B. 7

您可以忘记将通用转换器作为标记扩展,您不能简单地在XAML中创建通用对象(某些情况下,您可以在.NET 4中,不知道4.5中是否有任何更改).

创建实例的一种方法是使用一个辅助类来为你构造一个实例(我在另一个问题的答案中写了一个).