0

私は、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 に設定されているプロパティをシリアル化することはできますか?

4

1 に答える 1

0

出力が逆シリアル化できない可能性があることに満足している場合は、[ReadOnly(true)]プロパティを次のように装飾することで、目的を達成できます。

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
于 2015-04-20T19:26:41.113 に答える