如何在XAML标记中添加自定义(非依赖)集合属性值的值

时间:2010-11-03 11:25:50

标签: c# wpf xaml

如果我有一个简单的对象:

class MyObject
{
    public string MyValueProperty { get; set; }
}

如果我想在XAML中实例化它并设置属性(如下所示),则可行:

<local:MyObject MyValueProperty="SomeValue" />

但是,如果我的对象上有集合属性:

class MyObject
{
   public MyObject() { this.MyCollectionProperty = new List<string>(); }

   public IList<string> MyCollectionProperty { get; set; }
}

然后我无法弄清楚如何通过XAML向它添加项目。我希望能做的是:

<local:MyObject>
    <local:MyObject.MyCollectionProperty>
         <sys:String>One</sys:String>
         <sys:String>Two</sys:String>
         <sys:String>etc</sys:String>
    </local:MyObject.MyCollectionProperty>
</local:MyObject>

我试过这个,但是我得到一个解析异常,说明我无法将String设置为IList<string>类型的属性,并且我意识到我可以通过添加实例化来解决这个问题。标记的“列表”,但我想避免这种情况。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

解决了 - 问题是因为我的属性被定义为IList<T>,因此XAML解析器无法确定如何实例化适当的实例(即使它已经已经指定的实例。

将属性声明更改为List<string>使其正常工作:

class MyObject
{
   public MyObject() { this.MyCollectionProperty = new List<string>(); }

   public List<string> MyCollectionProperty { get; set; }
}