3

C#でのWinPhone8プロジェクト。グループ化されたリストにデータを入力しようとしています。グループヘッダーは表示されますが、アイテムは表示されません。関連するコードは次のとおりです。

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ません。リストが私のGroupクラスを文字列のコレクションとして認識していないようです。どうか、ここで何が問題になっていますか?

アイテムテンプレートは問題ありません。リストを非グループ化に変更すると、ダミーテキストの2つのアイテムが表示されます。

アイテムタイプとしてのをカスタムクラスに置き換えてstringも効果はありません。

4

2 に答える 2

5

Sevaは正しいです、Microsoftは、グループ化モードでのにItemsSource割り当てるもののタイプ要件を変更しました。LongListSelector

IEnumerable<T>アイテムをグループ化するために使用しているクラスを継承から継承に変換する必要がありますList<T>

回答の詳細については、こちらをご覧ください

実際には非常に単純です。これは、 WP8LongListSelectorで使用できるGroupクラスの例のようになります。

    public class Group<T> : List<T>
{
    public Group(char name, IEnumerable<T> items) : base(items)
    {
        this.Letter = name;

    }



    public char Letter
    {
        get;
        set;
    }


}
于 2012-12-23T00:52:34.933 に答える
1

LongListSelectorグループ化モードでは、ItemsSourceコレクション内のオブジェクトが(型指定されていない)実装されることを期待しているように見えますSystem.Collections.IList。単純なIEnumeratorことはしません。

それが文書化されていればいいのですが。これまでのところ、WP8SDKドキュメントは非常に時間がかかります。

于 2012-11-21T01:22:10.770 に答える