0

wp8 アプリで縦向きに表示されるアイテムのリストがあります。GroupHeaderTemplate と JumpListStyle を定義したので、グループ化されたリストとしてきれいに表示されます。キーでグループ化されたリストを表す KeyedList クラスを作成し、ViewModel は KeyedList の ObservableCollection を公開します。

using System.Collections.Generic;
using System.Linq;

namespace Timbre.Collections
{
    public class KeyedList<TKey, TItem> : List<TItem>
    {
        public TKey Key
        {
            get;
            protected set;
        }

        public KeyedList(TKey key)
            : base()
        {
            Key = key;
        }

        public KeyedList(TKey key, IEnumerable<TItem> items)
            : base(items)
        {
            Key = key;
        }

        public KeyedList(IGrouping<TKey, TItem> grouping) :
            base(grouping)
        {

            Key = grouping.Key;
        }
    }
}

ViewModel のプロパティは次のとおりです。

public ObservableCollection<KeyedList<string, Album>> Albums
    {
        get { return this.groupedAlbums; }
        private set
        {
            if (this.groupedAlbums == value) return;
            this.groupedAlbums = value;
            RaisePropertyChanged(() => this.Albums);
        }
    }

LongListSelector は、この ObservableCollection にバインドされ、適切に機能します。ページの向きが横向きに変わったら、レイアウト モードを List から LongListSelection の Grid に変更したいのですが、かなりのスペースが必要なため、グループ化を取り除きたいのですが、写真のグリッドを表示したいだけです. 通常、向きが横向きに変わったときに長いリストでこれを設定します: IsGroupingEnabled=false

しかし、単純なリストではなくリストのリストを公開するため、以前に使用したのと同じ ObservableCollection にバインドできなくなりました。これは、ViewModel で 2 つの ObservableCollections を公開することで解決できることがわかりました。1 つはグループ化されたリスト用で、もう 1 つは単純なリスト用です。しかし、通常、レイアウト モードがグリッドに変更されたときに、フラット リストでユーザーに表示されていたのと同じアイテムを表示したいと考えています。1 つの ObservableCollection を公開するだけで、LayoutMode を List から Grid に変更して機能させる方法はありますか?

4

0 に答える 0