繁体   English   中英

如何在Windows Phone中获取绑定到longlistselector的json链接数据?

[英]How to get json links data binded to longlistselector in windows phone?

我有三个json链接。 在它们中,一个链接包含类别(MenuCategory),即(启动器,主菜),两个链接其中包含(MenuItem)一些数据(项目名称,价格,图片)。 您可以在下图中看到,起动器和Maindishes是来自一个链接的标题,而起动器和Maindishes在它们下方的项目来自两个不同的链接(... / 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; }
        }

在此处输入图片说明

要在分组模式下使用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的定义。 您甚至可以启用跳转模式,以允许用户点击组标题并在它们之间跳转,但是我在这里没有演示此功能。 附件是此实现在设计器中的外观的示例屏幕快照。

样本设计器输出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM