C# 向XAML中的自定义集合属性添加值
我正在尝试通过XAML向自定义集合属性添加值:C# 向XAML中的自定义集合属性添加值,c#,xaml,xamarin,C#,Xaml,Xamarin,我正在尝试通过XAML向自定义集合属性添加值: <local:OnePageHeaderView> <local:OnePageHeaderView.RightIconViewCollection> <toolkit:IconView Source="one.png"></toolkit:IconView> <toolkit:IconView Source="two.png"></toolkit:IconVie
<local:OnePageHeaderView>
<local:OnePageHeaderView.RightIconViewCollection>
<toolkit:IconView Source="one.png"></toolkit:IconView>
<toolkit:IconView Source="two.png"></toolkit:IconView>
<toolkit:IconView Source="three.png"></toolkit:IconView>
</local:OnePageHeaderView.RightIconViewCollection>
</local:OnePageHeaderView>
问题是无论我试图在XAML中添加多少值,RightIconViewCollection
始终是我设置的默认值
我可以确认IconView
按预期工作,因为我通过在代码隐藏中手动添加IconView制作了一些测试用例,并且工作正常
为什么RightIconViewCollection
的值总是defaultValue(newobversablecollection()
)而不是我在XAML中显式添加的值
编辑:测试用例
XAML:
<local:OnePageHeaderView
LeftIconViewSource="one.png">
<local:OnePageHeaderView.RightIconViewCollection>
<toolkit:IconView Source="two.png"></toolkit:IconView>
<toolkit:IconView Source="three.png"></toolkit:IconView>
</local:OnePageHeaderView.RightIconViewCollection>
</local:OnePageHeaderView>
public OnePageHeaderView()
{
Init();
}
private void Init()
{
IconView leftIconView = new IconView
{
Source = LeftIconViewSource // LeftIconViewSource has value "one.png" which was assigned in XAML
};
ObservableCollection<IconView> iconViewCollection = new ObservableCollection<IconView>(RightIconViewCollection); // RightIconViewCollection has default value instead of assigned value in XAML
}
OnePageHeaderView:
<local:OnePageHeaderView
LeftIconViewSource="one.png">
<local:OnePageHeaderView.RightIconViewCollection>
<toolkit:IconView Source="two.png"></toolkit:IconView>
<toolkit:IconView Source="three.png"></toolkit:IconView>
</local:OnePageHeaderView.RightIconViewCollection>
</local:OnePageHeaderView>
public OnePageHeaderView()
{
Init();
}
private void Init()
{
IconView leftIconView = new IconView
{
Source = LeftIconViewSource // LeftIconViewSource has value "one.png" which was assigned in XAML
};
ObservableCollection<IconView> iconViewCollection = new ObservableCollection<IconView>(RightIconViewCollection); // RightIconViewCollection has default value instead of assigned value in XAML
}
public OnePageHeaderView()
{
Init();
}
私有void Init()
{
IconView leftIconView=新IconView
{
Source=LeftIconViewSource//LeftIconViewSource具有在XAML中分配的值“one.png”
};
ObservableCollection iconViewCollection=新的ObservableCollection(RightIconViewCollection);//RightIconViewCollection具有默认值,而不是XAML中的赋值
}
不应使用BindableProperty.Create
方法设置集合类型可绑定属性的默认值,而应在类的构造函数中设置
这与解释的WPF依赖属性相同
您将在此处找到如何实现集合类型可绑定属性的工作示例:
嗨,丹尼斯,你能把这句话换成一个问题吗?你想知道如何检测何时添加了项吗?@JamesCroft编辑了我的问题我需要
RightIconViewCollection
,因为我正在尝试填充构造函数中的项。如果我有非集合的自定义属性,但当我到达OnePageHeaderView
的构造函数时,集合从不保存我在XAML中添加的值,则该方法可以工作。我好像忽略了什么。。。如果我按照文档的建议在构造函数中设置默认值,那么在哪一点可以填充项目。在类的构造函数返回之前,应该如何添加在XAML中定义的值?这是不可能的。需要先创建一个实例,然后XAML解析器才能向其添加任何值。我添加了一个测试用例,它显示了另一个自定义属性如何从XAML获得其赋值,而自定义集合属性则没有。请参阅我的编辑。同样,您不能期望集合具有您在构造函数中用XAML定义的任何值。正如我在之前的评论中解释的那样,这毫无意义。任何默认值都应该在类定义中定义。在XAML标记中,创建类的实例。这里没有定义任何默认值。