Имеется ListView, как отобразить картинки (.bmp) и название файла, из любой выбранной папки
у меня ListView, а не ListBox у меня картинки надо отображать , а не иконки к ним
Уважаемый, вот я вам дал пример, где показывается как работать с MVVM, грамотная привязка данных и изменение элемента. Вам лишь оставалось поменять контрол на свой и чуть переписать заполнение данных. Ну раз вы это не смогли сделать, то давайте разбираться...
Нам понадобится ViewModel нашего объекта, который будет лежать в коллекции. Что нам нужно в нем? Наверно название и путь. Давайте напишем (не забываем, что привязка осуществляется к свойствам, а не полям!):
public class ImageViewModel
{
public ImageViewModel(string name, string path)
{
Name = name;
Path = path;
}
public string Name { get; set; }
public string Path { get; set; }
}
Далее нам понадобится некая ViewModel, которая будет отвечать за наш основной контент. Что в ней должно быть? Хм, коллекция с нашими объектами и ее заполнение. Пишем:
public class MainViewModel
{
public ObservableCollection<ImageViewModel> Images { get; set; } = new ObservableCollection<ImageViewModel>();
public MainViewModel()
{
var dir = Directory.GetFiles("D:\\Images", "*.jpg");
foreach (var file in dir)
{
var fileInfo = new FileInfo(file);
Images.Add(new ImageViewModel(fileInfo.Name, fileInfo.FullName));
}
}
}
Как тут все работает: Мы объявили пустую ObservableCollection
, далее я для примера в конструкторе заполняю ее. Сначала мы с помощью Directory.GetFiles
берем все .jpg файлы в нужной директории (выдаст string[]
), далее пробегаем по нему циклом, где каждую итерацию мы получаем с помощью FileInfo
информацию о файле, ну и заносим в нашу коллекцию данные.
Привяжем это все, я прям в MainWindow буду писать (вам советую до инициализации окна это делать).
private MainViewModel MainViewModel { get; set; } = new MainViewModel();
public MainWindow()
{
InitializeComponent();
DataContext = MainViewModel;
}
Ну и остается View. ListView
состроит из GridView
, который содержит в себе GridViewColumn
. Одну колонку нам трогать не нужно, оставим по стандарту, а вторую переопределим с помощью GridViewColumn.CellTemplate
и добавим туда объект Image
. Получаем в итоге что то вроде:
<ListView ItemsSource="{Binding Images}">
<ListView.View>
<GridView>
<GridViewColumn Width="200" Header="Название" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Width="140" Header="Изображение">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Path}" MaxHeight="100" Stretch="UniformToFill"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
Все. Запускаем:
Как по мне с тем вопросом - одно и тоже, но раз не понятно...
В общем, удачи в изучение c#!
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пишу консольную программку на c#, задание такое: Создать класс колоду картСоздать конструкторы колоды должны инициализировать колоду как...
Есть основная база данных PostgreSQL, требуется создать программно ее локальную копию, чтоб была возможность производить над ней все те же операции,...