Silverlight 4 - 如何通过XAML声明/填充控件的集合属性?

4

首先,我想感谢你们提供的所有精彩意见。我必须承认 - StackOverflow是最好的同行教师资源,因此它为我提供了比“大学”四年更多的知识。谢谢!

我正在使用一个包含对象集合属性的控件。

public class UserParameter
{
    string DisplayName { get; set; }
    string Property { get; set; }
    string Type { get; set; }
}

public class ParameterBuilder: UserControl
{
    private ObservableCollection<UserParameter> parameters;

    //alright - this is really dependency property.
    //described as property just for simplicity.
    public ObservableCollection<UserParamter> Parameters
    {
        get { return this.parameters; }
        set { this.parameters = value; }
    }
}

因此,这个问题的核心是如何在Xaml中创建这个集合。例如:

<custom:ParameterBuilder Name="Parameter">
    <custom:ParameterBuilder.Parameters>
        <custom:UserParameter DisplayName="Test 0" Property="Size"  Type="String"/>
        <custom:UserParameter DisplayName="Test 1" Property="Value" Type="Decimal"/>
    </custom:ParameterBuilder.Parameters>
</custom:ParameterBuilder>

这是否可行,如果可以,我该如何操作?
2个回答

2
如果您正在使用.NET 4.0,则应该能够使用x:TypeArguments参数(XAML2009规范的一部分)引用泛型 - 因此,您的参数中的Observable Collection将声明为:
<ObservableCollection x:TypeArguments="UserParameter">
    <l:UserParameter DisplayName="Test 0" Property="Size" Type="String" />
    <l:UserParameter DisplayName="Test 1" Property="Value" Type="Decimal" />
</ObservableCollection />

1
通常,集合属性应该是普通的(非依赖)只读属性。XAML解析器足够聪明,可以将项添加到集合属性中。例如:
public class ParameterBuilder: UserControl
{
    private ObservableCollection<UserParameter> parameters = new ObservableCollection<UserParameter>();

    // Don't make it a dependency property
    public ObservableCollection<UserParamter> Parameters
    {
        get { return this.parameters; }
    }
}

你可以像你描述的那样使用它:

<custom:ParameterBuilder Name="Parameter">
    <custom:ParameterBuilder.Parameters>
        <custom:UserParameter DisplayName="Test 0" Property="Size"  Type="String"/>
        <custom:UserParameter DisplayName="Test 1" Property="Value" Type="Decimal"/>
    </custom:ParameterBuilder.Parameters>
</custom:ParameterBuilder>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接