Просмотреть все файлы из списка - PullRequest
1 голос
/ 20 марта 2019

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

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

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

     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);
    }

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

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.' '

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

Новый код Uri:

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

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

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

1 Ответ

2 голосов
/ 20 марта 2019

Создание объекта элемента 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)
    });
}
...