Просмотреть все файлы из списка

Я работаю над проектом, который использует Caliburn micro в wpf С#.

Я нахожусь в процессе, когда хочу переписать свой метод ReadMediaFile(), чтобы он отображал все файлы в папке в списке.

Мой метод выглядит так:

     private void ReadMediaFile()
    {
        string result;
        _movieviewmodel = new MoviesViewModel();

        string[] filePaths = Directory.GetFiles(@"C:/Users/v80770/Desktop/Movies/");

        foreach (var file in filePaths)
        {
            result = Path.GetFileName(file);
            _movieviewmodel.MovieName = result;
        }
        AddItem(_movieviewmodel);
    }

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

AddItem находится в классе под названием TreeViewBase (я думаю, принадлежит caliburn micro) и выглядит следующим образом:

        public void AddItem(T item)
    {
        _dispatcher.SmartInvoke(() => Items.Add(item));
    }

У меня есть просмотр файлов фильмов в моем списке, но моя привязка MediaUri в представлении привязана к определенному файлу пути, но я хочу, чтобы он менялся в зависимости от того, что я выбираю

Я попытался отредактировать привязку к этому:

string test = _movieviewmodel.MovieName;
MediaUri = new Uri(test);

Но получить только исключение «System.UriFormatException: «Недопустимый URI: не удалось определить формат URI».»

Изображение Ури

Новый код Ури:

_movieviewmodel.MovieFilePath = @"C:/Users/v80770/Desktop/Movies/";

string test = _movieviewmodel.MovieFilePath;
MediaUri = new Uri(test + _movieviewmodel.MovieName);

Но он всегда показывает один и тот же фильм, и мой _movieviewmodel.MovieName не меняет имя в зависимости от того, какой фильм я выбираю, это всегда один и тот же фильм.

Поместите вызов AddItem внутри foreach

Cleptus 20.03.2019 14:49

Предполагая, что вы хотите иметь один экземпляр MoviesViewModel для каждого файла, вам нужно переместить movieviewmodel = new MoviesViewModel(); и AddItem(_movieviewmodel); внутри цикла foreach.

Clemens 20.03.2019 14:50

Спасибо, теперь это решилось. Но мой Uri сейчас не работает, см. вопрос редактирования.

Emma 20.03.2019 15:00

Вы пытаетесь создать Uri только из имени файла, а не из полного пути. Добавьте другое свойство, например. MovieFilePath в свой класс MoviesViewModel и используйте его для Uri.

Clemens 20.03.2019 15:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Создание объекта элемента MoviesViewModel и AddItem(_movieviewmodel); должно быть внутри foreach, иначе будет добавлен только последний элемент:

foreach (var file in filePaths)
{
    var movieviewmodel = new MoviesViewModel();
    movieviewmodel.MovieName = Path.GetFileName(file);
    AddItem(movieviewmodel);
}

или

foreach (var file in filePaths)
{
    AddItem(new MoviesViewModel
    {
        MovieName = Path.GetFileName(file)
    });
}

Другие вопросы по теме