2010-01-15 4 views
1

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

<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, и я хочу сделать это «правильным» способом, который, кажется, является DataBinding.

ответ

4

«Правильный» способ с точки зрения 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}"/> 

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