在长列表选择器中共享列表和网格布局的公共可观察集合?

时间:2013-05-26 00:01:20

标签: xaml data-binding windows-phone-8 longlistselector

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

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

0 个答案:

没有答案