从XAML使用通用的IValueConverter [英] Using a Generic IValueConverter from XAML
本文介绍了从XAML使用通用的IValueConverter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个泛型类实施的IValueConverter
。是这样的:
I have a generic class implementing IValueConverter
. Something like:
class MyValueConverter<T> : IValueConverter
通过XAML 2009,我可以用这样的:
With XAML 2009, I can use it like this:
<my:MyValueConverter x:TypeArguments='x:String'/>
但显然这是不允许的编译XAML(我想我们将不得不等待。 NET 5)
But apparently that's not allowed for "compiled" XAML (I guess we'll have to wait for .NET 5)
我目前的解决方法是继承它的每个用法:
My current workaround is subclassing it for each usage:
class FooMyValueConverter : MyValueConverter<Foo>
是否可以只使用XAML 2006年为此在标记?
Is it possible to do this in markup only using XAML 2006?
推荐答案
您也许可以使用自定义的的MarkupExtension (的存档)(的 V4 )。是这样的:
You could probably do this with a custom MarkupExtension(archive)(v4). Something like:
public class MyMarkupExtension : MarkupExtension {
public MyMarkupExtension() {
this.Type = /* some default type */;
}
public MyMarkupExtension(Type type) {
this.Type = type;
}
public Type Type { get; private set; }
public override object ProvideValue(IServiceProvider serviceProvider) {
Type type = typeof(MyValueConverter<>).MakeGenericType(this.Type);
return Activator.CreateInstance(type);
}
}
然后你会使用它像 {绑定...转换器= {本地:MyMarkup {X:类型BounceEase}}}
这篇关于从XAML使用通用的IValueConverter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文