В зависимости от того, хотите ли вы просто отображать список изображений или если вы также хотите их выбрать, вы можете либо выбрать элемент ItemsControl или ListBox. В обоих случаях вы должны определить DataTemplate, который контролирует отображение каждого элемента.
<ItemsControl ItemsSource="{Binding Images}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
или
<ListBox ItemsSource="{Binding Images}">
<ListBox.ItemTemplate>
<DataTemplate>
<Image Source="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Затем вы должны подумать о том, как вы определяете свой класс предметов. На всякий случай, если вы хотите динамически добавлять или удалять изображения из списка и позволять автоматическому обновлению пользовательского интерфейса, вы должны использовать ObservableCollection
в качестве типа контейнера. Поскольку существует преобразование встроенного типа от string
до ImageSource
(тип свойства Source
управления изображением], вы можете просто использовать ObservableCollection<string>
.
public class Gal
{
public ObservableCollection<string> Images { get; set; }
}
Вы может создать экземпляр этого класса следующим образом:
var gallery = new Gal();
gallery.Images = new ObservableCollection<string>(
Directory.EnumerateFiles(@"C:\Users\Public\Pictures\Sample Pictures", "*.jpg"));
Теперь вы можете напрямую привязываться к этому экземпляру, просто установив DataContext вашего окна (или везде, где должен отображаться список изображений) этому экземпляру:
DataContext = gallery;
Обратите внимание, что объявление привязки в ItemsControl или ListBox выше было {Binding Images}
. Если вам действительно нужно иметь свойство Gallery
(которое, как я полагаю, указано в MainWindow) и связать как {Binding Gallery.Images}
, вы можете установить DataContext следующим образом:
DataContext = this;