【问题标题】:Binding data in LongListSelector在 LongListSelector 中绑定数据
【发布时间】:2014-02-24 11:43:38
【问题描述】:

我指的是这里的例子:http://dotnet.dzone.com/articles/using-longlistselector-control

这是我的代码:

public class Chapters
    {
        private string mainTitle;

        public string MainTitle
        {
            get { return mainTitle; }
            set { mainTitle = value; }
        }

        private List<string> subTitle;

        public List<string> SubTitle
        {
            get { return subTitle; }
            set { subTitle = value; }
        }


    }

private static IEnumerable<HighwayCode> GetCityList()
        {
            return myList;
             // Which already contains data:

              MainTitle : Chapters
              subtitle : ABC
              subtitle : X

              MainTitle : Chapters Two
              subtitle : ASDF
              subtitle : GHIJK

        }

        public class GroupingLayer<TKey, TElement> : IGrouping<TKey, TElement>
        {

            private readonly IGrouping<TKey, TElement> grouping;

            public GroupingLayer(IGrouping<TKey, TElement> unit)
            {
                grouping = unit;
            }

            public TKey Key
            {
                get { return grouping.Key; }
            }

            public IEnumerator<TElement> GetEnumerator()
            {
                return grouping.GetEnumerator();
            }

            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
            {
                return grouping.GetEnumerator();
            }
        }

XAML:

<phone:PhoneApplicationPage.Resources>
        <DataTemplate x:Key="GroupHeader">
            <Border Background="{StaticResource PhoneAccentBrush}" Margin="{StaticResource PhoneTouchTargetOverhang}" Padding="{StaticResource PhoneTouchTargetOverhang}">
                <TextBlock Text="{Binding Key}"/>
            </Border>
        </DataTemplate>

        <DataTemplate x:Key="ItemTmpl">
        <Grid>
            <TextBlock Style="{StaticResource PhoneTextLargeStyle}" 
                       Foreground="Black" 
                       Text="{Binding SubTitle}"></TextBlock>
        </Grid>
    </DataTemplate>
    </phone:PhoneApplicationPage.Resources>

<phone:LongListSelector x:Name="longListSelector"
                                    IsGroupingEnabled="True" LayoutMode="List" HideEmptyGroups="False"
                                    ItemTemplate="{StaticResource ItemTmpl}"
                                    GroupHeaderTemplate="{StaticResource GroupHeader}"/>

我是这样设置的:

var selected = (from c in myList
                group c by c.MainTitle into n
                select new GroupingLayer<string, MyObject>(n)).ToList();

longListSelector.ItemsSource = selected;

但对我来说,它只显示主标题,但根本不显示子标题。

这里有什么问题?

【问题讨论】:

    标签: c# wpf windows-phone-8 windows-phone longlistselector


    【解决方案1】:

    我认为您应该将您的项目来源设置为可观察集合

    我没有完全像你那样做,但是 here is my xamlhere is a viewmodel 是我为 windows phone 商店构建的应用程序。

    我也认为在更新时清除然后设置您的项目来源是关键。当我构建 WPF 应用程序时,我似乎记得花了很多时间来解决 observablecollection 不更新的问题。

    【讨论】:

    • 该集合需要触发一个 CollectionChanged 事件,以便长列表选择器注意到更改。这是遇到相同问题的人的博客文章(昨天偶然发布):blog.mrlacey.co.uk/2014/02/…您使用其他集合,例如 List 或 IEnumerable,但您需要确保它在加载项目后调用 NotifyPropertyChanged。
    【解决方案2】:

    当你这样做时

    var selected = (from c in myList group c by c.MainTitle into n select new GroupingLayer<string, MyObject>(n)).ToList();

    你会得到一个列表,其中每个项目都有:

    • 一个 Key 属性(在您的情况下包含 MainTitle 值),因为您 按 MainTitle 分组!
    • “子”项列表

    当你定义你的DataTemplate时,你可以绑定属性“Key”,因为在这个新列表中存在,但是SubTitle不存在,所以你不能显示它!

    你可以看看这个示例:

    http://code.msdn.microsoft.com/wpapps/PhotoHub-Windows-Phone-8-fd7a1093

    【讨论】:

    • 我该如何解决这个问题?你能帮我吗?,我需要在这里改变什么?
    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多