2009-09-18 35 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