2011-04-29 60 views
7

我有一個通用類實現IValueConverter。喜歡的東西:使用XAML中的通用IValueConverter

class MyValueConverter<T> : IValueConverter 

與2009年XAML,我可以這樣使用它:

<my:MyValueConverter x:TypeArguments='x:String'/> 

但很顯然,這不是允許「編譯」 XAML(我想我們將不得不等待.NET 5)

我目前的解決方法是繼承它的每個用法:

class FooMyValueConverter : MyValueConverter<Foo> 

是否有可能做到這一點以米arkup只使用XAML 2006?

+0

你受到任何機會讓**錯誤MC6022 **呢? (試圖找出我是否有同樣的問題,或者我是否應該創建一個新的問題。) – 2015-02-01 21:04:42

+0

@ o.r.mapper,這是4年前和2個技術堆棧;我真的不記得了。 – 2015-02-01 21:20:57

回答

5

您可以使用自定義MarkupExtensionarchive)(v4)執行此操作。喜歡的東西:

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

然後你會使用它像{Binding ... Converter={local:MyMarkup {x:Type BounceEase}}}

+0

好主意。我只是把它變成通用的,這樣我就可以實例化任何泛型類型。 – 2011-04-29 15:55:52

相關問題