Хранение информации о файле для WPF TreeView (C #) - PullRequest
1 голос
/ 15 мая 2009

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

Во всяком случае, я довольно новичок в программировании (первый год по вычислительной технике, так что я знаю о приседе), и в настоящее время я играю с C # и WPF. Ради интереса я пытаюсь создать простой музыкальный браузер - для начала он просто прочитает мой каталог и выведет список файлов, а затем запустит один, если вы дважды щелкнете или что-то еще. В любом случае, у меня проблемы с тем, как хранить TreeViewItems. Мне нужно сохранить его в виде иерархического проекта, чтобы я мог выполнить цикл или что-то еще и заполнить древовидную структуру, как только я создал все пути, но я не уверен в наилучшем способе сделать это. Atm, я использую TreeViewItem [] [] [] - массив массивов, которые содержат массивы, что на самом деле кажется неправильным, думая об этом ...

Думая об этом сейчас, возможно, мне следует создать базу данных и заполнить древовидное представление из этого? Единственная проблема в том, что я никогда не делал ничего подобного XD.

Спасибо за любую помощь!

-Edibles

Ответы [ 2 ]

0 голосов
/ 15 мая 2009

Если вы хотите получить доступ к музыке только через структуру папок в стиле проводника, то вам не нужна база данных, поскольку файловая система Windows уже предоставляет вам централизованную точку для получения ваших данных. Вы действительно должны быть осторожны при попытке заполнить все дерево при запуске, поскольку вы не хотите, чтобы пользователи, ожидающие, пока приложение просканирует всю структуру своих жестких дисков, прежде чем смогут начать навигацию по дереву. Процесс загрузки элементов дерева только тогда, когда они нужны, называется отложенной загрузкой и выходит за рамки ответа. К счастью эта статья Code Project показывает, как именно это сделать.

С другой стороны, если вы хотите имитировать стиль библиотеки проигрывателя Windows Media, где пользователь предоставляет определенные каталоги, и вы создаете способ навигации по MP3 по исполнителю, альбому и т. Д., То, вероятно, будет хочу какую-то базу данных в фоновом режиме. В этих случаях вам нужно прочитать информацию тега из mp3-файлов в выбранных папках, добавить информацию в хорошо нормализованную базу данных (чтобы обеспечить быстрый поиск и перекрестные ссылки) и предоставить пользовательский интерфейс, который позволяет пользователю перемещаться таким образом. Еще раз вы будете лениво загружать дерево - выберите исполнителя, а затем заполните дочерние узлы всеми своими альбомами / песнями из базы данных на момент запроса - но предстоит еще много работы, чтобы завершить работу ( выберите тип базы данных, определите схему, научитесь разбирать теги mp3 и т. д.), поэтому я предполагаю, что вы имели в виду первый вариант.

0 голосов
/ 15 мая 2009

Давайте сделаем шаг назад и посмотрим на общую архитектуру. В этом сценарии, как правило, TreeView отображает данные, тип класса, который представляет данные, и файл / база данных / и т. Д. как хранилище для данных.

Шаблон должен быть таким, что вы загружаете данные из файла / базы данных / и т.д. в пользовательский тип класса, который представляет сущность. Затем вы должны привязать этот источник к TreeView (либо с помощью привязки WPF, либо вручную).

Допустим, вы хотите, чтобы каждый узел в дереве представлял музыкальный альбом. Вы должны создать класс MusicAlbum, который может состоять из Исполнителя, названия альбома, даты альбома, списка песен и т. Д. Эти данные сериализуются в файл / базу данных и т. Д. И обратно.

Затем вы связываете эти данные с TreeView. WPF поддерживает привязку напрямую к спискам пользовательских объектов или вы можете вручную настроить привязку. Если вы новичок в разработке, вы можете рассмотреть возможность связывания вручную, поскольку его немного проще настроить, и это даст вам хорошую практику.

Что касается хранилища, я бы порекомендовал либо базу данных (например, SQLite), либо файл XML. Поскольку вы учитесь разрабатывать, я рекомендую начать с XML-файла. Это хороший способ представления данных, который не требует таких же накладных расходов, как и база данных. Если бы вы поднимали это на уровень производства, я бы определенно рекомендовал базу данных.

РЕДАКТИРОВАТЬ: Сам вопрос немного расплывчатый, поэтому вы можете захотеть быть более точным относительно того, что именно вы просите. Вам нужны примеры кода привязки TreeView или вам нужны руководство или общая структура?

...