【问题标题】:How to get json links data binded to longlistselector in windows phone?如何获取 json 链接数据绑定到 windows phone 中的 longlistselector?
【发布时间】:2023-03-29 10:58:01
【问题描述】:

我有三个 json 链接。其中,一个链接包含类别(MenuCategory)即(starters,maindishes),两个链接包含(MenuItem)一些数据(Itemname,Price,Picture)。您可以在下图中看到,starters 和 Maindishes 是来自一个链接的标题,它们下面的项目用于 starters 和 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; }
        }

【问题讨论】:

  • 您可以通过绑定轻松实现这一目标
  • 您是否正在收集这些数据?
  • 我只在一个菜单项链接的列表框中显示。但我不确定如何处理 LLS。
  • 两者相同 lls 是高级列表框
  • 您能否更深入地了解您正在使用的 MenuItem 对象的集合?我很惊讶 MenuCategory 不包含 MenuItems 的集合。

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


【解决方案1】:

要在分组模式下使用 LongListSelector,您需要将数据组合成与您的应用程序不同的形式。最终,您会将列表控件的 ItemsSource 绑定到可以视为 List&lt;List&lt;T&gt;&gt; 的属性,其中外部 List 可以是标准 List 对象,内部 List&lt;T&gt; 对象应包含 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。您甚至可以启用跳转模式以允许用户点击组标题并在它们之间跳转,但我没有在这里演示此功能。附件是这个实现在设计器中的样例截图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多