Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向XAML中的自定义集合属性添加值_C#_Xaml_Xamarin - Fatal编程技术网

C# 向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

我正在尝试通过XAML向自定义集合属性添加值:

<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标记中,创建类的实例。这里没有定义任何默认值。