Json 绑定列表<;列表<;字符串>&燃气轮机;对项目进行控制

Json 绑定列表<;列表<;字符串>&燃气轮机;对项目进行控制,json,xaml,windows-8,windows-runtime,microsoft-metro,Json,Xaml,Windows 8,Windows Runtime,Microsoft Metro,我正在创建Windows应用商店应用程序。我想创建一个类似表的结构,所以我使用了ItemsControl。我需要在下面显示给定的JSON,它是表中字符串列表的列表。我从中尝试了一些内容,但得到了重复输出 JSON 模范班 public class SmsTable { [JsonProperty("head")] public List<List<string>> Headers { get; set; } [JsonProperty("body

我正在创建Windows应用商店应用程序。我想创建一个类似表的结构,所以我使用了ItemsControl。我需要在下面显示给定的JSON,它是表中字符串列表的列表。我从中尝试了一些内容,但得到了重复输出

JSON

模范班

public class SmsTable
{
    [JsonProperty("head")]
    public List<List<string>> Headers { get; set; }

    [JsonProperty("body")]
    public List<List<string>> RowValues { get; set; }
}
公共类SmsTable
{
[JsonProperty(“头”)]
公共列表头{get;set;}
[JsonProperty(“主体”)]
公共列表行值{get;set;}
}
XAML


预期产量

实际产量


您有一些事情需要更改

  • 您只需要一个
    ItemsControl
    。它是外部ItemsControl,用于遍历
    列表中的项。在本例中,您有一个
    列表
    。行数据中的每个项目都是一个
    列表
  • 由于您对循环遍历内部
    列表的所有项不感兴趣
    ,因此将删除内部
    项控件
    ,并调整
    绑定。
    绑定到索引器的语法是用C表示法指定索引:
    [\code>。
    列表中没有可用于访问索引值的属性(请记住,所有绑定必须是属性或使用转换器)。在本例中,有一种特殊的属性路径语法,它完全满足您的需要
  • 作出这些改变:

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <ItemsControl x:Name="icOuter" Grid.Row="1" ItemsSource="{Binding RowValues}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>                    
                    <Grid HorizontalAlignment="Left">                        
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                            <Border >
                                <TextBlock Text="{Binding [0]}" Width="180"/>
                            </Border>
                            <Border >
                                <TextBlock Text="{Binding [1]}" Width="180"/>
                            </Border>
                            <Border >
                                <TextBlock Text="{Binding [2]}" Width="245"/>
                            </Border>
                            <Border >
                                <TextBlock Text="{Binding [3]}" Width="125"/>
                            </Border>
                            <Border >
                                <TextBlock Text="{Binding [4]}" Width="125"/>
                            </Border>
                        </StackPanel>
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>
    

    
    

    结果:


    是啊!成功了。您能给我解释一下您在
    数据模板
    中进行的绑定吗?
    <ItemsControl x:Name="icOuter" Grid.Row="1" ItemsSource="{Binding RowValues}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <ItemsControl x:Name="icInner" ItemsSource="{Binding}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Grid HorizontalAlignment="Left">
                                <StackPanel Orientation="Horizontal" Background="White" HorizontalAlignment="Left">
                                    <Border Style="{StaticResource BorderCell}">
                                        <TextBlock Text="{Binding Items[0], ElementName=icInner}" Style="{StaticResource TextBlockCell}" Width="180"/>
                                    </Border>
                                    <Border Style="{StaticResource BorderCell}">
                                        <TextBlock Text="{Binding Items[1], ElementName=icInner}" Style="{StaticResource TextBlockCell}" Width="180"/>
                                    </Border>
                                    <Border Style="{StaticResource BorderCell}">
                                        <TextBlock Text="{Binding Items[2], ElementName=icInner}" Style="{StaticResource TextBlockCell}" Width="245"/>
                                    </Border>
                                    <Border Style="{StaticResource BorderCell}">
                                        <TextBlock Text="{Binding Items[3], ElementName=icInner}" Style="{StaticResource TextBlockCell}" Width="125"/>
                                    </Border>
                                    <Border Style="{StaticResource BorderCell}">
                                        <TextBlock Text="{Binding Items[4], ElementName=icInner}" Style="{StaticResource TextBlockCell}" Width="125"/>
                                    </Border>
                                </StackPanel>
                            </Grid>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    
    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <ItemsControl x:Name="icOuter" Grid.Row="1" ItemsSource="{Binding RowValues}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>                    
                    <Grid HorizontalAlignment="Left">                        
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                            <Border >
                                <TextBlock Text="{Binding [0]}" Width="180"/>
                            </Border>
                            <Border >
                                <TextBlock Text="{Binding [1]}" Width="180"/>
                            </Border>
                            <Border >
                                <TextBlock Text="{Binding [2]}" Width="245"/>
                            </Border>
                            <Border >
                                <TextBlock Text="{Binding [3]}" Width="125"/>
                            </Border>
                            <Border >
                                <TextBlock Text="{Binding [4]}" Width="125"/>
                            </Border>
                        </StackPanel>
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>