WPF: привязка источника данных к каталогу - PullRequest
1 голос
/ 15 января 2010

Я пытаюсь сделать мой первый проект WPF, и я начал с этого примера проекта для отображения изображений. Частично это XAML, который связывает Listbox с массивом изображений:

<ListBox.ItemsSource>
    <x:Array Type="{x:Type ImageSource}">
        <ImageSource>http://static.flickr.com/34/70703587_b35cf6d9eb.jpg</ImageSource>
        <ImageSource>http://static.flickr.com/20/70703557_494d721b23.jpg</ImageSource>
        <ImageSource>http://static.flickr.com/35/70703504_3ebf8f0150.jpg</ImageSource>
        <ImageSource>http://static.flickr.com/35/70703474_18ef30450f.jpg</ImageSource>
    </x:Array>
</ListBox.ItemsSource>

Теперь это хорошо, но я хотел бы связать его со всеми изображениями в подпапке и ее подпапках, которые соответствуют шаблону. Моя структура каталогов выглядит так:

Archive
    1994-01
        Index.jpg
        Page1.jpg
        ...
        PageN.jpg
    1994-02
        Index.jpg
        Page1.jpg
        ...
        PageN.jpg

Я хочу связать Listbox с различными изображениями Index.jpg.

Мой обычный подход заключается в создании некоторого CodeBehind с использованием System.IO и Directory.GetFiles, но поскольку XAML кажется довольно мощным, мне просто интересно: может ли этот тип привязки быть полностью достигнут в XAML?

Как уже говорилось, абсолютный новичок в WPF, и я хочу сделать это "правильным" способом, который, похоже, связан с данными.

1 Ответ

4 голосов
/ 15 января 2010

«Правильный» путь с точки зрения WPF будет следующим (разделение кода и представления):

    public class IndexReader: INotifyPropertyChanged
    {
        public IEnumerable<string> IndexFiles 
            { get { ... } set { ... raise notify } }

        public void ReadIndexImagesFromFolder(string folder)
        {
...
        }
    }

вы все равно будете использовать привязку для привязки к ListBox (после того, как вы установите для экземпляра IndexReader значение DataContext для ListBox или одного из его родителей):

<ListBox ItemsSource="{Binding IndexFiles}"/>

Правило таково: если оно не может быть легко связано, не пытайтесь это сделать.

...