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 に変更して機能させる方法はありますか?