更新分组列表视图

时间:2015-08-12 14:34:00

标签: c# xaml windows-runtime windows-phone-8.1

我正在开发一个应用程序,它在ListViews和GridViews中显示很多项目,我正在对这些项目进行分组,并使用SemanticZoom控件使导航更容易。这些项目代表歌曲。我的问题是当用户删除列表中的项目时(通过按住项目然后从上下文菜单中选择删除),项目将从数据库中删除,但不会从列表视图或gridview中删除,因此我必须收听CollectionChanged事件,然后重新加载分组并再次将其分配给CollectionViewSource,这感觉不对。

我想知道是否有办法在WinRT中实现这种效果以及如何实现。主要是我希望交互就像WP联系人应用程序,当用户删除一个联系人时,它会被移除而不会重新加载该列表。

谢谢。

2 个答案:

答案 0 :(得分:2)

我一直在学习很多关于SemanticZoom的CollectionViewSource,最重要的是如何在不做奇怪的事情的情况下继续更新(通常在示例中被遗忘)视图:

1.-在模型中创建一个类,类似于一个名为GroupedSongs的视图,它具有类别类属性(字符串,类,枚举)和

2.- ObservableCollection<曲>属性为INotifyPropertyChanged

3.-在ViewModel中创建一个名为Groups的ObservableCollection。 (第一次实例后永远不要重置)

4.-阅读内容并填写Groups ObservableCollection

5.-在XAML中添加以下资源:

<CollectionViewSource x:Name="CVS" ItemsPath="Songs"  IsSourceGrouped="True" Source="{Binding Groups}"/>

6.-在语义放大视图中:

<ListView x:Name="ZoomedInView" ItemsSource="{Binding Source={StaticResource CVS}}"

7.-在语义缩小视图中

<GridView  ItemsSource="{Binding Groups}"

这是我取得的最佳选择,如果你在群组中添加或删除歌曲,你会看到用户界面刷新。

我已在Windows 10中测试了我正在准备的应用

答案 1 :(得分:0)

所以我通过创建ObservableCollection的ObservableCollection来解决这个问题,例如:ObservableCollection<ObservableCollection<ItemClass>> 当我更新项目(添加或删除项目)时,我只找到包含项目的内部集合并进行更改。用户界面将很好地反映变化。

编辑:只是为了澄清,为了使列表视图或gridview能够显示我从ObservableCollection继承来创建此类的标题:

public class KeyedList<T> : ObservableCollection<T>
{
    public object Key
    { get; set; }

    public KeyedList()
    { }

    public KeyedList(IGrouping<object, T> group)
    {
        Key = group.Key;
        foreach (var member in group)
            Add(member);
    }
}

初始化类时,T的类型为ObservableCollection:

KeyedList<ObservableCollection<Song>> MySongs = new .....

希望这会对某人有所帮助。