从XAML使用通用的IValueConverter [英] Using a Generic IValueConverter from XAML

查看:496
本文介绍了从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆