分组LongListSelector:标题出现,项目不出现

时间:2012-11-20 18:28:09

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

C#中的WinPhone 8项目。我正在尝试填充分组列表。显示组标题,但项目不显示。相关代码是:

class MyPage
{
    public class Group : IGrouping<string, string>
    {
        public string Title{get;set;}
        public string[] Items;

        public string Key
        {
            get { return Title; }
        }

        public IEnumerator<string> GetEnumerator()
        {
            return (Items as IEnumerable<string>).GetEnumerator();
        }

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

    private Group[] m_ItemGroups =
        {
            new Group(){Title = "A", Items = new string[] {"A", "ASA"}},
            new Group(){Title = "X", Items = new string[] {"X", "XX"}},
        };

    private void OnLoaded(object sender, RoutedEventArgs e)
    {
        TheList.ItemsSource = m_ItemGroups;
    }
}

和XAML:

<phone:LongListSelector
        x:Name="TheList"
        Grid.Row="1"
        IsGroupingEnabled="True"
        SelectionChanged="OnSelChanged"
        >

        <phone:LongListSelector.GroupHeaderTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Title}"
                   Style="{StaticResource PhoneTextGroupHeaderStyle}"
                   Foreground="{StaticResource PhoneForegroundBrush}" />
            </DataTemplate>
        </phone:LongListSelector.GroupHeaderTemplate>

        <phone:LongListSelector.ItemTemplate>
            <DataTemplate>
                <StackPanel Margin="0,0,0,17" Width="432" Orientation="Horizontal">
                    <TextBlock Text="Hello world" TextWrapping="Wrap" Width="345"/>
                </StackPanel>

            </DataTemplate>
        </phone:LongListSelector.ItemTemplate>

    </phone:LongListSelector>

都没有调用GetEnumerator()方法。永远不会调用Key getter。看起来列表不能将我的Group类识别为字符串集合。拜托,这里有什么问题?

项目模板很好。当我将列表更改为非分组时,我会看到两个带有虚拟文本的项目。

使用自定义类替换string作为项类型无效。

2 个答案:

答案 0 :(得分:5)

Seva是正确的,Microsoft更改了您在分组模式下分配给ItemsSource的{​​{1}}的类型要求。

您需要将您正在使用的任何类别转换为将项目从继承LongListSelector分组为仅继承IEnumerable<T>

请参阅here for full description of answer

实际上非常简单,这就是你可以使用 WP8 LongListSelector的Group类的示例:

List<T>

答案 1 :(得分:1)

LongListSelector集合中,ItemsSource看起来希望System.Collections.IList集合中的对象实现IEnumerator(无类型)。一个简单的{{1}}不会。

我希望有记录。到目前为止,WP8 SDK文档吸引了大量时间。