【问题标题】:Generic IValueConverter C# WPF usage in XAML?XAML 中的通用 IValueConverter C# WPF 用法?
【发布时间】:2012-04-23 13:20:00
【问题描述】:

基本上我使用了发布的转换器here,只是将数据类型更改为泛型。如何在 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();
    }
}

在转换器是通用之前,我只是使用过

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

有没有办法用 XAML 中的通用转换器做到这一点?

【问题讨论】:

    标签: c# wpf xaml generics ivalueconverter


    【解决方案1】:

    您可以忘记将通用转换器作为标记扩展,您不能简单地在 XAML 中创建通用对象(.NET 4 中的there are some cases in which you can,不知道 4.5 中是否有任何变化)。

    创建实例的一种方法是使用帮助类来为您构造一个实例(我在another question's answer 中写了一个)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多