Member 14012894 Ответов: 2

Как получить все файлы изображений из папки и отобразить их в datagrid в WPF


Привет Мне нужно динамически получать все изображения из определенной папки и отображать их в матрице(gridview) в wpf с помощью c#. Я новичок в c# и wpf, пожалуйста, направьте меня, чтобы пройти через это




заранее спасибо

Что я уже пробовал:

Я уже пробовал делать что-то подобное

string[] filesindirectory = каталог.Заражен(@"C:\Users\user\Downloads\");

Список<строка&ГТ; изображение = новый список<строка> У(filesindirectory.Рассчитывать());
foreach(строка s в filesindirectory)
{
изображения.Добавить(Строка.Формат("~/Images/{0}", System.IO.Path.GetFileName(s)));
}
компонента DataGrid.ItemsSource = изображения;

pradiprenushe

Так в чем же здесь проблема? Вы не получаете файлы или получаете ошибку.

Gerry Schmitz

Начните с "одного" файла и изображения.

2 Ответов

Рейтинг:
2

#realJSOP

Я бы создал класс, который наследуется от элемента управления wpf image, и конструктор принял бы путь/имя файла в качестве параметра, который будет использоваться в качестве источника.

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


Рейтинг:
1

George Swan

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


Из xaml.

<Grid>
       <Grid.RowDefinitions>
           <RowDefinition Height="*" />
           <RowDefinition Height="Auto" />
       </Grid.RowDefinitions>
       <Grid HorizontalAlignment="Center"  >

           <ListView ItemsSource="{Binding CardCollection }" >
               <ListView.ItemTemplate>
                   <DataTemplate >
                       <Grid HorizontalAlignment="Center" >
                           <Image   Source="{Binding CardGraphic}" />
                       </Grid>
                   </DataTemplate>
               </ListView.ItemTemplate>
               <ListView.ItemsPanel >
                   <ItemsPanelTemplate>
                       <UniformGrid Columns="13" HorizontalAlignment="Center"  />
                   </ItemsPanelTemplate>
               </ListView.ItemsPanel>
           </ListView>

       </Grid>

С точки зрения модели.
private IEnumerable<Card> LoadImagesFromFile()
       {
           string fullCardsPath = Path.GetFullPath(Constants.RelativeFilePath);
           var filenames = new List<String>(Directory.EnumerateFiles(fullCardsPath, Constants.AllImagesOfType));
           return filenames.Select(fileName => new BitmapImage(new Uri(fileName))).Select((cardGraphic, i) => new Card(i, cardGraphic)).ToList();
       }

 public ObservableCollection<Card> CardCollection
       {
           get
           {
               return cardCollection;
           }
           set
           {
               cardCollection = value;
               NotifyPropertyChanged();
           }
       }

Класс карт имеет
public int Index { get; private set; }

    public BitmapImage CardGraphic { get; private set; }

      public Card(int index, BitmapImage cardGraphic)
      {
          Index = index;
          CardGraphic = cardGraphic;
      }

В моем случае я определил константы как
public static  class Constants
   {

      public const string RelativeFilePath = @"..\..\Images";
      public const string ImageType = ".gif";
      public const string AllImagesOfType = "*.gif";

   }