XAML绑定到动态嵌套对象

时间:2018-10-24 10:23:22

标签: c# xaml xamarin.forms

我收到JSON API的响应,并将其在我的代码中映射到对象。 对象结构如下:

public class A {
    public B b;
    public C c;
    public D d;
}
public class B{
    public string a;
    public string b;
}
...
public class D{
    public F[] f;
}
public class F{
    public string c;
    public string d;
    public string e;
}

我将绑定设置为Observable Collection <A> aCollection,并且工作正常。我有一些A对象,可以像这样访问所有成员。

<ListView ItemsSource="{Binding aCollection}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <StackLayout>
                        <Label Text="{Binding b.a, TargetNullValue='-'}"/>
                        <Label Text="{Binding c.a, TargetNullValue='-'}"/>
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

但是我不知道如何访问数组F []和F的成员。而且我也不预先知道数组将有多大。

我要实现的是显示数组中与包含的对象A有关的每个条目。

希望这个问题有意义。

1 个答案:

答案 0 :(得分:0)

如果要将Array数据绑定到listview中的每个单元格中,请根据您的代码进行如下修改:

<ListView ItemsSource="{Binding aCollection}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <StackLayout>
                    <Label Text="{Binding b.a, TargetNullValue='-'}"/>
                    <Label Text="{Binding c.a, TargetNullValue='-'}"/>

                    //***
                        <ListView ItemsSource="{Binding d.F}">
                          <ListView.ItemTemplate>
                             <DataTemplate>
                               <ViewCell>
                                  <StackLayout>
                                     <Entry Text="{Binding c}"/>
                                     <Entry Text="{Binding d}"/>
                                     <Entry Text="{Binding e}"/>
                                  </StackLayout>
                               </ViewCell>
                             </DataTemplate>
                          </ListView.ItemTemplate>
                        </ListView>
                    //***

                </StackLayout>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

使用listview包含一个用于显示数据等的listview.D类更改为

 public class {
    public List<F> f{ get; set; }
 }

不确定是否要,希望有用。