将嵌套的JSON绑定到XAML中的列表框

时间:2014-03-25 04:09:33

标签: c# xaml windows-phone-7 data-binding windows-phone-8

这是我的模态,

 public class main
    {
        public List<categories> categorieslist { get; set; }
    }

    public class categories
    {
        public int categoryId { get; set; }
        public string categoryName { get; set; }
        public List<pdf> pdfdocs { get; set; }
        public List<video> videoFiles { get; set; }
    }

    public class pdf
    {
        public string URL { get; set; }
        public string language { get; set; }
        public string createdDate { get; set; }
        public bool isFavorite { get; set; }
        public bool isRead { get; set; }
    }

我使用JSON.NET反序列化

 main mainobj = JsonConvert.DeserializeObject<main>(App.hello);

我需要显示所选类别的PDF列表, 我使用LINQ过滤该特定类别,我无法绑定PDF列表..

 pdf.ItemsSource = App.mainobj.categorieslist.Where(i => i.categoryId.Equals(s));

  <ListBox x:Name="pdf" Margin="0,0,0,363"  ItemsSource="{Binding}" Foreground="White">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Text="{Binding pdf.URL}" Foreground="White"></TextBlock>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

1 个答案:

答案 0 :(得分:3)

<ListBox ItemsSource="{Binding categorieslist}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding categoryId }" FontSize="20" />

                <ItemsControl ItemsSource="{Binding pdf}" Margin="0 20 0 0">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Border BorderBrush="Blue" BorderThickness="2">
                                <TextBlock Text="{Binding URL }" FontSize="20" />
                            </Border>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
                <ItemsControl ItemsSource="{Binding videoFiles}" Margin="0 20 0 0">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Border BorderBrush="Red" BorderThickness="2">
                                <TextBlock Text="{Binding URL}" FontSize="20" />
                            </Border>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>