Pregunta

¿Cómo puedo hacer esto?

Intenté usar un TypeConverter, pero lo único que se me ocurrió fue construir el XML para los tipos, lo cual no es suficiente. TypeConverters en la serialización xaml escapará de xml y lo tratará como texto sin formato. Los convertidores de valor no son mucho mejores.

Ahora, me estoy mudando a ISupportInitialize y lanzaré si se realizan cambios después de la inicialización, pero me hubiera gustado la ruta inmutable ...


Ejemplo de un tipo que deseo serializar:

public struct Foo
{
  public string Bar {get;private set;}
  public Foo(string bar) : this()
  {
    Bar = bar;
  }
}

y el código

var foo = new Foo("lol");
var serializedFoo = XamlWriter.Save(foo);
¿Fue útil?

Solución

Lo sentimos, no puede usar la serialización normal con objetos inmutables en XAML 2006.

Con XAML 2009, que admite constructores y métodos de fábrica, debería ser capaz de lograr su objetivo. Solo tenga en cuenta que WPF 4 no utilizará XAML 2009.

Otros consejos

Doh! Leí completamente esta pregunta ...
=================================

Intente usar una extensión de marcado para crear su estructura inmutable:

public class FooExtension : MarkupExtension
{
  public string Bar {get; set;}

  public ImgPathExtension(string bar)
  {
    this.Bar = bar;
  }

  public override object ProvideValue(IServiceProvider serviceProvider)
  {
    var foo = new Foo(this.Bar);
    return foo;
  }
}

Ahora, puede usarlo en su XAML con la sintaxis de extensión: {ext: Foo Bar = " lol "}

Simplemente utilícelo de la misma manera que utilizaría cualquier otra extensión de marcado, como Binding, DynamicResource, etc.

Consulte este enlace si necesita más detalles.

HTH,

Charles

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top