2009-09-18 36 views
-2

我该怎么做?Xaml序列化和不可变结构?

尝试使用TypeConverter,但我唯一能想到的是为类型构造XML,但并未完全切断它。 xaml序列化中的TypeConverters将转义xml并将其视为纯文本。价值转换器并不好。

现在,我要搬到ISupportInitialize接口,如果更改初始化后作出将抛出,但我也喜欢一成不变的路线......一个类型的


例子我想序列化:

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

和代码

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

这将有助于如果你想展示一些代码来了解你想什么反序列化手写XAML时做 – codymanix 2009-09-18 23:24:19

回答

3

很抱歉,您不能正常使用serializat在XAML 2006.中使用不可变对象。

使用支持构造函数和工厂方法的XAML 2009,您应该能够实现您的目标。只是要警告,WPF 4将不会使用XAML 2009.

1

Doh!我完全误解了这个问题...
=================================

尝试使用标记扩展来创建你的不可改变的结构:

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

现在,你可以在你的XAML与扩展语法使用它:{EXT:富酒吧=“笑”}

只用它同您可以使用任何其他MarkupExtension,例如Binding,DynamicResource等。

如果您需要更多详细信息,请参阅this link

HTH,

查尔斯

+0

这可以使用,但XAML _serialization_(即'XamlWriter.Save')将不知道如何使用它。 – 2009-12-07 21:16:25

+0

XAML序列化程序将不知道使用标记扩展名... – 2009-12-07 21:23:36

+0

是的,我刚刚意识到我的错误...对不起。 – Charles 2009-12-07 21:50:22