Иерархические данные с XML и Treeview - PullRequest
0 голосов
/ 07 сентября 2011

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

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

Videos
|---Music Videos
      |---Music video 01
      |---Music video 02
      |---Music video 03
|---TV Shows
      |---TV show 01
      |---TV show 01

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

Кроме того, как мне сохранить URL-адрес вместе с именем видео, но при этом в виде дерева должно отображаться только имя?

Я был бы очень благодарен за любые указания относительно лучшего способа сделать это. Есть ли способ лучше? Это все очень запутанно.

Большое спасибо.

1 Ответ

1 голос
/ 07 сентября 2011

Хорошая архитектура данных - нетривиальная проблема, я могу просто высказать некоторые мои мысли, но не могу гарантировать, что они все являются хорошей идеей.

Во-первых, не рекомендую работать напрямую с XML-данными, это становится очень неудобным, если вы пытаетесь делать более сложные вещи.

Вы можете сериализовать свои данные в XML, но вы должны знать о его ограничениях и побочных эффектах, здесь есть вопросы, которые можно найти в SO, которые пытаются сравнить различные методы сериализации, вы можете захотеть найти те, так как другие форматы могут быть более подходящими. Например, очевидны два аспекта XML:

  • Огромные накладные расходы на размер файла из-за тегов и текстовых данных
  • В отличие от двоичной сериализации, данные более или менее удобочитаемы и прозрачны

В любом случае я бы использовал базу данных или обычную объектную модель и сериализовал / десериализировал ее для хранения.

Если вы хотите разрешить подкатегориям, вы можете использовать составной шаблон , тогда вы можете иметь объект Video и Category, оба реализующие интерфейс IVideoComposite, где * Например, 1020 * имеет свойство Children типа ObservableCollection<IVideoComposite>.

Затем вы можете использовать неявно типизированные шаблоны данных (a HierarchicalDataTemplate для Category) для создания элементов в вашем TreeView. (Для одного из Category вы затем свяжете ItemsSource с Children)

...