2015-08-12 4 views
1

Я работаю над приложением, которое отображает множество элементов в ListViews и GridViews, и я группирую эти элементы и используя элемент управления SemanticZoom, чтобы упростить навигацию. Элементы представляют песни. Моя проблема заключается в том, что пользователь удаляет элементы в списке (удерживая нажатой кнопку и затем удаляя из контекстного меню) элемент удаляется из базы данных, но не из списка или gridview, поэтому я должен слушать событие CollectionChanged, а затем снова загрузите группировку и снова назначьте ее в CollectionViewSource, что не кажется правильным.Обновление сгруппированного списка

Я хотел бы знать, есть ли способ добиться этого эффекта в WinRT и как. В основном, я хочу, чтобы взаимодействие было таким же, как приложение контактов WP, когда пользователь удаляет контакт, который он удаляет без повторного загрузки списка.

спасибо.

ответ

0

Так что я решил эту проблему, создав ObservableCollection из ObservableCollections как: ObservableCollection<ObservableCollection<ItemClass>> и когда я обновляю элементы (добавление или удаление элемента) I просто найдите внутреннюю коллекцию, в которой есть элемент, и внесите изменения. Пользовательский интерфейс будет хорошо отражать изменения.

Edit: Только для уточнения, чтобы включить ListView или 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 ..... 

Надеюсь, это поможет кому-то.

+0

И показывает ли ListView или GridView групповые заголовки? интересный –

+0

Hi, извините за недостатком информация. Я изменяю свой ответ. – Rafael

+0

Большое спасибо за разъяснение –

2

Я узнавал много о SemanticZoom CollectionViewSource, и самое важное, как постоянно обновлять (как правило, забытое в примерах) мнение, не делая странные вещи:

1. Определения Создать класс в модели, которая как представление с именем GroupedSongs со свойством категории класса (строка, класс, перечисления) и

2.- ObservableCollection < Song> свойство с INotifyPropertyChanged

3.- Создание ObservableCollection в вашей ViewModel называют группы, например, , (Никогда не сбрасывается всегда ясно после первого экземпляра)

4.- Прочитайте и заполнить Группы 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.- В семантическом Out Увеличить Просмотр

<GridView ItemsSource="{Binding Groups}" 

Это лучший вариант, который я достиг, и если вы добавите или удалите песни из групп, вы увидите обновленный пользовательский интерфейс.

Я проверил в Windows 10 для приложения Я готовлю

+0

Спасибо, ваш ответ вел меня к решению. – Rafael

Смежные вопросы