4

を使用する小さな概念実証を作成しようとしましたContentWrapperAttributeが、それを尊重するために XamlXmlReader または XamlObjectWriter を取得できません。コレクションに「文字列」を追加できないという例外がスローされるだけです。

次のような小さなオブジェクト モデルを定義しました。

[ContentProperty("MyItems")]
public class RootClass
{
    public RootClass()
    {
        this.MyItems = new MyItemCollection();
    }

    public MyItemCollection MyItems { get; set; }
}

[ContentWrapper(typeof(MyItemText))]
public class MyItemCollection : List<MyItem>
{
}

[ContentProperty("Text")]
public class MyItemText : MyItem
{
    public string Text { get; set; }
}

public class MyItem
{
}

そして、このコードを使用して Xaml をロードしようとしています。

string xml = @"<?xml version=""1.0"" encoding=""utf-16""?>
<RootClass xmlns=""clr-namespace:XamlTest;assembly=XamlTest"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
    <MyItem />
    <x:String>test</x:String>
</RootClass>
";
StringReader reader = new StringReader(xml);

XamlReader xamlReader = new XamlXmlReader(reader, new XamlSchemaContext());

XamlObjectWriter xow = new XamlObjectWriter(xamlReader.SchemaContext);
while (xamlReader.Read())
    xow.WriteNode(xamlReader);
xow.Close();

RootClass result = (RootClass)xow.Result;

System.Xaml.XamlObjectWriterException「タイプ 'XamlTest.MyItemCollection' のコレクションに値を追加すると、例外がスローされました。」というメッセージが表示されます。および内部System.ArgumentException例外は、「値 "test" は "XamlTest.MyItem" 型ではなく、このジェネリック コレクションでは使用できません」と主張しています。

XamlXmlReaderContentWrapperAttributeまたは XamlObjectWriter によって取得されるはずですか、それともこの属性の機能を誤解していますか? そうでない場合、実際にこれを機能させた人はいますか?

4

0 に答える 0