Показать элементы имени файла изолированного хранилища в представлении Expander внутри ListBox

Первоначально у меня был ListBox, получающий Bind со списком, содержащий ListBoxItem, содержимое которого будет заполнено именами файлов из изолированного хранилища путем простого вызова свойства GetUserContent класса IsolatedStorageFile.

Теперь в новом требовании я хочу поставить Расширитель, заголовок которого будет соответствовать разным папкам в Изолированном хранилище. Я бы загружал имена файлов из изолированного хранилища из соответствующей папки, например «\data*» (папка данных), когда этот конкретный расширитель расширяется.

Так может кто-нибудь, пожалуйста, направьте меня на то же самое в элементах управления ExpanderView и заполните его элементы списка именами файлов этой конкретной папки, сохраненными в изолированном хранилище.

Заранее спасибо.


person Siddharth    schedule 23.04.2013    source источник
comment
А как насчет подпапок? Вы ищете древовидное представление с несколькими уровнями или вас устраивает всего 2 уровня? Кроме того, хотя это может быть реализовано так, как вы описываете, это не стандартный пользовательский интерфейс WP. Если это работает для вас, может быть лучше вместо этого иметь селектор длинного списка (но это означает, что у вас есть только структура папок/имен файлов, а не многоуровневые папки)   -  person Shahar Prish    schedule 23.04.2013
comment
На самом деле да, как вид на дерево. Или же я думал уже определить элемент управления ExpanderView с заголовком, скажем, Data. Теперь, когда пользователь расширяет этот расширитель данных, я хочу показать имена списка файлов, полученные из папки данных из изолированного хранилища. Я надеюсь, что я ясно.   -  person Siddharth    schedule 23.04.2013
comment
С вами все ясно, но можете ли вы прокомментировать, будете ли вы иметь несколько уровней (папка/подпапка/подпапка/файл) или всегда только 2 уровня (папка/файл)   -  person Shahar Prish    schedule 23.04.2013
comment
Всего 2 уровня. Папка и файл.   -  person Siddharth    schedule 23.04.2013


Ответы (1)


Во-первых, пользовательский интерфейс, который вы описываете, не является стандартным поведением WP. Что вам нужно сделать, так это иметь коллекцию групп.

Ваш ItemsSource во внешнем списке нужно привязать к коллекции Groups:

<LitBox ItemsSource="{Binding Groups}">

Затем внутри ItemTemplate вам нужно определить свой развернутый вид и привязать ДРУГОЙ список к элементам группы. Что-то вроде (я не уверен, какой вид Expander вы используете, но, вероятно, это будет что-то вроде этого):

<ListBox.ItemTemplate>
  <whatever:ExpanderView>
    <ListBox ItemsSource="{Binding Items}"/>
  </whatever:ExpanderView>
</ListBox>

Причина, по которой это плохая идея, заключается в том, что ListBox плохо работают внутри других listbox той же ориентации. В лучшем случае вы получите странную прокрутку, в худшем — проблемы с памятью, поскольку система не сможет справиться с виртуализацией. Чтобы избежать некоторых потенциальных проблем с прокруткой, вы также можете поместить ItemsControl с StackPanel в качестве шаблона панели. Это снова может вызвать проблемы с памятью, в зависимости от того, сколько у вас элементов.

Я предлагаю вам изменить свой пользовательский интерфейс. Один из этих 3 вариантов должен быть хорош для вас:

  1. Немного измените поведение, чтобы оно стало селектором длинного списка (аналогично поведению собственного приложения «Контакты»). Это не совсем то, что вам нужно, но больше соответствует рекомендациям для Windows Phone и доставит вам меньше головной боли.
  2. Сделайте это как двухэтапную операцию. У вас есть список папок, когда вы нажимаете на одну из них, открывается новая страница с соответствующими элементами.
  3. Другое не очень хорошее, но возможное решение - иметь ObservableCollection‹>, который содержит только папки, а затем добавлять/удалять элементы в него соответствующим образом (убедившись, что они правильно отформатированы - для этого вы можете использовать селектор стиля или шаблона)

person Shahar Prish    schedule 23.04.2013
comment
Двухэтапная операция — хороший вариант, но тогда мне нужно добавить для этого еще одну страницу навигации, а также, если пользователь хочет вернуться на главную страницу, ему нужно дважды нажать «назад», потому что я добавил еще одну страницу навигации, поэтому это становится еще одной проблемой. - person Siddharth; 24.04.2013
comment
Вы можете легко решить проблему с кнопкой «Назад», обнаружив, что она была нажата, и вернуться еще на один уровень назад. В остальном вы правы. Обратите внимание, что вы, вероятно, можете искать элементы управления Tree для Windows Phone — они могут дать вам то, что вы хотите. - person Shahar Prish; 24.04.2013