Как использовать загруженный файл изображения через диалоговое окно файла, которое сохраняется в выходном каталоге в приложении WPF? - PullRequest
1 голос
/ 17 апреля 2019

У меня есть вопрос относительно включения файла после его копирования в каталог отладки программы.

У меня есть сетка данных WPF, и в этой сетке данных я отображаю список сотрудников с именем столбцов,возраст и фото.Я могу дважды щелкнуть строку, чтобы открыть новое окно для обновления сведений, включая фотографию.

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

В моем файле .csproj я включил это:

<ItemGroup>
  <Content Include="img\**">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>

Это гарантирует, что папка img будет скопирована в выходной каталог при сборке.Я также добавил файл .txt в папку userData, так как в противном случае он не копирует папку.

Когда пользователь загружает фотографию и нажимает кнопку Сохранить в моей программе, он делает две вещи:

  1. Копирует файл из исходного каталога в выходной каталог с относительным путем img\userData\filename.jpg
  2. Обновляет запись SQLite для пути к фотографии этого сотрудника, например, с img\default\staffmember1default.jpg до img\userData\newstaffmember1.jpg

В настоящее время моя программа не обновляет сетку данных, чтобы отразить изменения, поэтому после закрытия и запуска программы отображается пустое фото сотрудника, который изменил фото.Однако, если бы я скопировал эту фотографию в каталог img\userData, включенный в мой проект, и перезагрузил программу, она работает.

Есть ли способ обойти это и позволить ему отображать новую фотографию изuserData каталог?Подходит ли весь этот метод или есть лучший способ решения всего этого процесса?

1 Ответ

1 голос
/ 17 апреля 2019

Просмотрев ссылку @Clemens, я пришел к решению, которое, похоже, решает проблему.

private void uploadButton_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();

    if(openFileDialog.ShowDialog() == true)
    {
        string filepath = openFileDialog.FileName;
        string filename = openFileDialog.SafeFileName;

        string local_path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        string parent_path = local_path + @"\ProjectName";
        string child_path = parent_path + @"\user";

        if(!System.IO.Directory.Exists(parent_path))
        {
            System.IO.Directory.CreateDirectory(parent_path);
        }

        if(!System.IO.Directory.Exists(child_path))
        {
            System.IO.Directory.CreateDirectory(child_path);
        }

        string target_path = child_path + @"\" + filename;
        File.Copy(filepath, target_path);
        photoBox.Source = new BitmapImage(new Uri(target_path));
        staff.photo_path = target_path;
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...