1

基本的に、ここに投稿されたコンバーターを使用し、データ型をジェネリックに変更しました。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の汎用コンバーターでこれを行う方法はありますか?

4

1 に答える 1

7

ジェネリックコンバーターをマークアップ拡張機能にすることを忘れることができます。XAMLでジェネリックオブジェクトを単純に作成することはできません(.NET 4で作成できる場合があり4.5で何かが変更されたかどうかはわかりません)。

インスタンスを作成する1つの方法は、インスタンスを構築するヘルパークラスを使用することです(私は別の質問の回答にインスタンスを作成しました)。

于 2012-04-23T13:28:25.957 に答える