WPF:具有只读属性的属性未序列化 XAML



我正在开发一个 C# WPF 应用程序,该应用程序使用 Windows 窗体属性网格来允许用户查看和更改对象的属性。 我希望某些属性可见但已锁定,因此我将其 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"属性。

这是正确的行为吗? 是否可以序列化已将只读设置为 true 的属性?

如果您对输出可能无法反序列化感到满意,那么您可以通过使用以下方法来装饰您的 [ReadOnly(true)] 属性来实现您想要的:

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]

相关内容

  • 没有找到相关文章

最新更新