2009-09-18 6 views
-2

Comment est-ce que je peux faire ceci?Sérialisation Xaml et structures immuables?

Essayé en utilisant un TypeConverter, mais la seule chose que je pouvais penser était de construire le XML pour les types, ce qui ne le coupe pas tout à fait. TypeConverters dans la sérialisation xaml va échapper à xml et le traiter comme du texte brut. Les convertisseurs de valeur ne sont pas beaucoup mieux.

Maintenant, je vais passer à ISupportInitialize et jetterai si des modifications sont apportées après l'initialisation, mais je l'aurais aimé la route immuable ...


Exemple d'un type que je souhaite sérialisation:

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

et le code

var foo = new Foo("lol"); 
var serializedFoo = XamlWriter.Save(foo); 
+0

Il serait utile que vous viendrais code pour comprendre ce que vous essayez de faire – codymanix

Répondre

3

Désolé, vous ne pouvez pas utiliser serializat normale Avec des objets immuables dans XAML 2006.

Avec XAML 2009, qui prend en charge les constructeurs et les méthodes d'usine, vous devriez être en mesure d'atteindre votre objectif. Juste être prévenu, WPF 4 n'utilisera pas XAML 2009.

1

Doh! Je suis complètement mal interprété cette question ...
=================================

Essayez en utilisant une extension de balisage pour créer votre struct immuable:

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

maintenant, vous pouvez l'utiliser dans votre XAML avec la syntaxe d'extension: {ext: Foo Bar = "lol"}

utiliser il suffit même comme vous utiliseriez toute autre MarkupExtension, telle que Binding, DynamicResource, etc.

Voir this link si vous avez besoin de plus de détails.

HTH,

Charles

+0

Cela peut être utilisé lorsque la désérialisation XAML écrite à la main, mais XAML _serialization_ (c.-à- 'XamlWriter.Save') ne saura pas comment l'utiliser. –

+0

Le sérialiseur XAML ne saura pas utiliser l'extension de balisage ... –

+0

Oui, je viens de réaliser mon erreur ... Désolé pour ça. – Charles

Questions connexes