私は、Windows フォーム PropertyGrid を使用してユーザーがオブジェクトのプロパティを表示および変更できるようにする C# WPF アプリケーションに取り組んでいます。一部のプロパティは表示したいがロックしたいので、それらの ReadOnly 属性を true に設定しています。
ただし、プロジェクトの他の場所では、XAML シリアライザーを使用してオブジェクトをシリアル化しているため、ReadOnly 属性が設定されたプロパティがシリアル化から省略されていることがわかりました。
これを実証するには:
// Simple class containing 3 properties, one of which has a ReadOnly attribute
public class TestClass
{
public int a { get; set; }
[ReadOnly(true)]
public int b { get; set; }
public int c { get; set; }
}
このコードの実行:
TestClass test = new TestClass();
test.a = 1;
test.b = 2;
test.c = 3;
string xStr = XamlWriter.Save(test);
Console.WriteLine(xStr);
出力を与えます:
<TestClass a="1" c="3" xmlns="clr-namespace:myTest;assembly=myTest" />
明らかに 'b' プロパティがありません。
これは正しい動作ですか?ReadOnly が true に設定されているプロパティをシリアル化することはできますか?