Xamlシリアル化と不変の構造体?
-
22-07-2019 - |
質問
これを行うにはどうすればよいですか
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);
解決
申し訳ありませんが、XAML 2006では不変オブジェクトで通常のシリアル化を使用できません。
コンストラクタとファクトリメソッドをサポートするXAML 2009を使用すると、目標を達成できるはずです。警告してください、WPF 4はXAML 2009を使用しません。
他のヒント
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;
}
}
現在、拡張構文{ext:Foo Bar =" lol"}
を使用してXAMLで使用できます。Binding、DynamicResourceなど、他のMarkupExtensionを使用するのと同じ方法で使用します。
さらに必要な場合は、このリンクをご覧ください。詳細。
HTH、
チャールズ
所属していません StackOverflow