查看列表中的所有文件

View all file from a list

我正在开发一个在 wpf C# 中使用 Caliburn micro 的项目。

我正在重写我的方法 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 的 class 中(我认为属于 caliburn micro),它看起来像这样:

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

我在列表中查看了电影文件,但视图中的 MediaUri 绑定是针对特定路径文件绑定的,但我希望它根据我的选择进行更改

我试图编辑对此的绑定:

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

但只得到一个异常"System.UriFormatException: 'Invalid URI: The format of the URI could not be determined.'"

Picture of Uri

新的 Uri 代码:

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

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

但它总是显示同一部电影,而我的 _movieviewmodel.MovieName 不会根据我选择的电影更改名称,它始终是同一部电影。

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