首先,我要感谢大家提供的所有精彩输入。我不得不承认 - StackOverflow是最好的同伴辅导员资源,因此它为我提供了更多的知识,而不是......在“大学”中的4年。谢谢!
我正在使用一个具有属性的控件,该属性是对象的集合。
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>
这是否可行,如果可行,我该如何去做?
答案 0 :(得分:2)
如果您使用的是.NET 4.0,则应该能够使用x:TypeArguments参数(part of the XAML2009 spec)引用泛型 - 因此您的参数中的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 :(得分: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>