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中使用通用转换器?
您可以忘记将通用转换器作为标记扩展,您不能简单地在XAML中创建通用对象(在某些情况下,您可以在.NET 4中,不知道4.5中是否有任何更改).
创建实例的一种方法是使用一个辅助类来为你构造一个实例(我在另一个问题的答案中写了一个).