2

Вылезают ошибки

  1. Не удается неявно преобразовать тип "System.Collections.Generic.List<string>" в "System.Windows.Controls.ListView"

  2. Не удается применить индексирование через [] к выражению типа "ListView". pr_5

Понятно, что из-за первой лезет и вторая. Подскажите как можно это дело исправить или как проще создать это приложение, руки опускаются уже

private void btn_path_Click(object sender, RoutedEventArgs e)
{
    var dialog = new FolderBrowserDialog();
    var dialogResult = dialog.ShowDialog();
if (dialogResult.HasFlag(System.Windows.Forms.DialogResult.OK))
{
    tbx_path.Text = dialog.SelectedPath;
}

lw_SpisokPhoto = Directory.EnumerateFiles(tbx_path.Text)
    .Where(x =&gt; x.EndsWith(&quot;.jpg&quot;) || x.EndsWith(&quot;.png&quot;))
    .ToList();
if (lw_SpisokPhoto.AlternationCount == 0)
{
    return;
}
im_gallery.Source = new BitmapImage(new Uri(lw_SpisokPhoto[0]));

}

aepot
  • 49,560
  • 1
    Прочитайте про привязки, очень простой механизм, прям очень. В WPF проекте вы не должны хотеть использовать контролы в коде, не должно быть im_gallery.Source и так далее. Данные в одном месте (простые классы), а вид в другом (простой XAML). System.Windows.Forms - это видеть в WPF проекте не кажется странным? Ведь это компоненты WinForms, а не WPF. Вот это тоже lw_SpisokPhoto[0], ну подумайте логически, что вы хотите тут? Наверно взять один из объектов, что в нем, верно? Так почему не lw_SpisokPhoto.Items[0]? – EvgeniyZ Nov 19 '22 at 19:43
  • @EvgeniyZ насколько мне известно, FolderBrowserDialog отсутствует в Microsoft.Win32 спейсе. Поэтому здесь проще всего Winforms тащить. – aepot Nov 19 '22 at 20:17
  • @aepot Проще, да. Правильней? Нет. В NuGet есть сторонние пакеты, которые все это возвращают, без форм, например одна из популярных - Ookii.Dialogs.Wpf. – EvgeniyZ Nov 19 '22 at 22:10
  • @EvgeniyZ в одном случае тащишь нугет либу с собой, в другом установленную внутри самого дотнета используешь. Разница невелика. Можно самому на винапи написать эти диалоги, особо ничего сложного. На самом деле для ученика это даже неважно. – aepot Nov 19 '22 at 22:28

1 Answers1

0

lw_SpisokPhoto это контрол, а не коллекция, его коллекция это свойство ItemsSource.

private void btn_path_Click(object sender, RoutedEventArgs e)
{
    var dialog = new FolderBrowserDialog();
    var dialogResult = dialog.ShowDialog();
if (dialogResult.HasFlag(System.Windows.Forms.DialogResult.OK))
{
    tbx_path.Text = dialog.SelectedPath;
}

string[] files = Directory.EnumerateFiles(tbx_path.Text)
    .Where(x =&gt; x.EndsWith(&quot;.jpg&quot;) || x.EndsWith(&quot;.png&quot;))
    .ToArray();
lw_SpisokPhoto.ItemsSource = files;
if (files.Length == 0)
{
    return;
}
im_gallery.Source = new BitmapImage(new Uri(files[0]));

}

Пример работы с файлами в листбоксе есть еще здесь.

aepot
  • 49,560
  • @Котька дополнил ответ, упростил код. – aepot Nov 19 '22 at 20:14
  • так, я дурак. а операция ToArray? – Котька Nov 19 '22 at 20:19
  • @Котька здесь просто, зачем делать список, если не нужно добавлять и удалять элементы, поэтому массив. Массив более легковесный и быстрее работает. – aepot Nov 19 '22 at 20:21
  • 1
    логично, спасибо вам большое – Котька Nov 19 '22 at 20:24
  • здравствуйте, не нашла способа как вам лично написать. хотела узнать, а вы работаете с sql? – Котька Nov 30 '22 at 15:06
  • @Котька здравствуйте, нет – aepot Nov 30 '22 at 15:11