XAML-Serialisierung und unveränderlich structs?
-
22-07-2019 - |
Frage
Wie kann ich das tun?
Versucht, einen Typeconverter verwenden, aber das einzige, was ich denken konnte, war die XML für die Typen zu konstruieren, die so gar nicht schneiden. Typeconverter in XAML-Serialisierung wird xml entkommen und es wie Klartext behandeln. Wertwandler sind nicht viel besser.
Nun, ich bin zu ISupportInitialize bewegen und wird ausgelöst, wenn Änderungen nach der Initialisierung vorgenommen werden, aber ich würde die unveränderliche Strecke gern ...
Beispiel eines Typs, möchte ich serialisiert:
public struct Foo
{
public string Bar {get;private set;}
public Foo(string bar) : this()
{
Bar = bar;
}
}
und der Code
var foo = new Foo("lol");
var serializedFoo = XamlWriter.Save(foo);
Lösung
Sie können leider nicht normal Serialisierung mit unveränderlichen Objekten in XAML 2006 verwenden.
Mit XAML 2009, die Konstrukteure und Factory-Methoden unterstützt, sollten Sie in der Lage sein, um Ihr Ziel zu erledige. Nur seien Sie gewarnt, 4 WPF nicht 2009 mit XAML sein
Andere Tipps
Doh! Ich falsch verstanden diese Frage völlig ...
=================================
Versuchen Sie, eine Markup-Erweiterung mit Ihrer unveränderlichen Struktur zu erstellen:
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;
}
}
Jetzt können Sie es in Ihrem XAML mit der Erweiterung Syntax verwenden: {ext: Foo Bar = "lol"}
Just es die gleiche Weise verwenden Sie eine andere Markupextension verwenden würden, wie Binden, Dynamic, etc.
Siehe diesen Link wenn Sie mehr brauchen Details.
HTH,
Charles