2011-04-29 8 views
7

Tengo una clase genérica que implementa IValueConverter. Algo así como:Uso de un IValueConverter genérico de XAML

class MyValueConverter<T> : IValueConverter 

Con XAML 2009, que puede utilizar de esta manera:

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

Pero al parecer eso no está permitido "compilado" XAML (supongo que tendremos que esperar a que .NET 5)

Mi solución actual es la subclasificación que para cada uso:

class FooMyValueConverter : MyValueConverter<Foo> 

¿es posible hacer esto en m arkup solo usando XAML 2006?

+0

¿Se le recibiendo ** ** MC6022 de error no por casualidad? (Estoy tratando de averiguar si tengo el mismo problema, o si debo crear una nueva pregunta.) –

+0

@ o.r.mapper, esto fue hace 4 años y 2 acumulaciones de tecnología; Realmente no recuerdo. –

Respuesta

5

Probablemente podría hacer esto con un MarkupExtension personalizado (archive) (v4). Algo así como:

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

Entonces usaría como {Binding ... Converter={local:MyMarkup {x:Type BounceEase}}}

+0

Gran idea. Lo haré genérico para que pueda instanciar cualquier tipo genérico. –

Cuestiones relacionadas