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中的Property如下:

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 并正常工作。现在,当页面的方向变为横向时,我想将 LongListSelection 上的布局模式从 List 更改为 Grid,并且我想摆脱分组,因为它需要相当多的空间,我只想显示图片网格. 通常,当方向更改为横向时,我会将其设置在长列表中: IsGroupingEnabled=false

但是我不再能够绑定到我之前使用的同一个 ObservableCollection,因为它公开了一个列表列表,而不是一个简单的列表。现在我知道这可以通过在 ViewModel 中公开 2 个 ObservableCollections 来解决,一个用于分组列表,一个用于简单列表。但通常,当布局模式更改为网格时,我想在平面列表中显示用户可见的相同项目。有没有办法只公开一个 ObservableCollection ,而只是将 LayoutMode 从 List 更改为 Grid 并使其工作?

4

0 回答 0