如何将json链接数据绑定到windows phone中的longlistselector?

时间:2013-11-21 11:44:42

标签: c# json xaml windows-phone-7 windows-phone-8

我有三个json链接。在它们中,一个链接包含类别(MenuCategory)即(starters,maindishes),两个链接包含(MenuItem)一些数据(Itemname,Price,Picture)。您可以在下面的图像中看到,起始者和主菜是来自一个链接的标题,其下面的项目是初学者和主题,来自两个不同的链接(... / menuitems / 1和../menuitems/2)。如何将此数据导入longlistselector,如图所示。我将Json数据放入我的应用程序,但我需要在LLS中显示它们。如何将它们结合起来?

// http://xxxxxx.net/restaurant/category/1

// http://xxxxxx.net//restaurant/menuitems/1     //和http://xxxxxx.net/restaurant/menuitems/2

     public class MenuItem
        {
            public int Menuitemid { get; set; }
            public int Menucategoryid { get; set; }
            public string Itemname { get; set; }        
            public double Price { get; set; }
            public string Picture { get; set; }     
        }

        public class MenuCategory
        {
            public int Menucategoryid { get; set; }
            public int Menuid { get; set; }
            public string Categoryname { get; set; }
            public string Description { get; set; }
            public bool Active { get; set; }
            public string Createddate { get; set; }
            public object Modifieddate { get; set; }
        }



        public class MenuCategoryRootObject
        {
            public List<MenuCategory> data { get; set; }
        }

enter image description here

1 个答案:

答案 0 :(得分:1)

要在分组模式下使用LongListSelector,您需要将数据组合成与应用程序可能不同的形式。最后,您将列表控件的ItemsSource绑定到可以看作List<List<T>>的属性,其中外部List可以是标准List对象,内部List<T>对象应包含所有属性你的MenuCategory,类型T应该是类似于MenuItem的类。以下类实现应该给出一个实现此目标的方法的示例。 MenuItemModel可能不应该从您的实现中的MenuItem继承,但这只是为了演示的目的:

public class MenuCategoryModel : List<MenuItemModel>
{
    public MenuCategoryModel() { }

    public int Menucategoryid { get; set; }
    public int Menuid { get; set; }
    public string Categoryname { get; set; }
    public string Description { get; set; }
    public bool Active { get; set; }
    public string Createddate { get; set; }
    public object Modifieddate { get; set; }
}

public class MenuItemModel : MenuItem { }

如果您绑定到ViewModel,它将具有一个可用作LongListSelector的ItemsSource的属性,如下所示:

public class MyViewModel
{
    public MyViewModel() { }

    public List<MenuCategoryModel> Categories { get; set; }
}

从那里,您的XAML标记可能如下所示:

<phone:LongListSelector ItemsSource="{Binding Categories}"
                        IsGroupingEnabled="True">
    <phone:LongListSelector.GroupHeaderTemplate>
        <DataTemplate>
            <Grid Background="DarkSlateGray">
                <TextBlock Style="{StaticResource PhoneTextTitle3Style}"
                            Text="{Binding Categoryname}"
                            FontWeight="Bold" />
            </Grid>
        </DataTemplate>
    </phone:LongListSelector.GroupHeaderTemplate>
    <phone:LongListSelector.ItemTemplate>                   
        <DataTemplate>
            <Border Background="LightGray"
                    BorderBrush="DarkSlateGray"
                    BorderThickness="0 0 0 1">
                <StackPanel>
                    <TextBlock Style="{StaticResource PhoneTextTitle2Style}"
                                Foreground="DarkSlateGray"
                                Text="{Binding Itemname}" />
                    <TextBlock Style="{StaticResource PhoneTextTitle2Style}"
                                Foreground="DarkSlateGray"
                                Text="{Binding Price, StringFormat=C}" />
                </StackPanel>
            </Border>
        </DataTemplate>
    </phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>

您可以看到LongListSelector的IsGroupingEnabled设置为true,并且GroupHeaderTemplate和ItemTemplate的定义。您甚至可以启用跳转模式以允许用户点击组标题并在它们之间跳转,但我没有在此处演示此功能。附件是设计器中此实现的示例截图。

Sample designer output