2012-04-23 9 views
0

私は基本的に投稿されたコンバータhereを使用して、データ型を汎用に変更しました。ジェネリックコンバーターをXAML内で使用するにはどうすればよいですか?一般的なIValueConverter XAMLでのWPFの使用法?

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(); 
    } 
} 

Converterは、私はちょうど

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

XAMLでの一般的なコンバータでこれを行う方法はありますが使用される一般的だった前に?

答えて

5

ジェネリックコンバータをマークアップ拡張機能にすることを忘れることはできますが、XAMLで汎用オブジェクトを作成することは簡単にできません(.NETではthere are some cases in which you can、4.5では変更がないかどうかはわかりません)。

インスタンスを作成する1つの方法は、インスタンスを作成するヘルパークラスを使用することです(私はanother question's answerに1つ書いています)。

+1

完全に真実ではありません。http://msdn.microsoft.com/en-us/library/ee956431.aspx –

+0

@DanPuzey:私に言い換えることができます。 –

+0

ああ、申し訳ありません、あなたは正しいです。私が投稿する前に、テストしておいてください(そして、それをすべて読んでください)。お詫び! (もしあなたがあなたの答えを編集するなら、私は-1を取り除くでしょう) –

関連する問題