我正在研究一个在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);
}
当我调试程序时,所有文件都显示在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代码:
_movieviewmodel.MovieFilePath = @"C:/Users/v80770/Desktop/Movies/";
string test = _movieviewmodel.MovieFilePath;
MediaUri = new Uri(test + _movieviewmodel.MovieName);
但是它总是显示同一部电影,而我的_movieviewmodel。MovieName不会更改名称,取决于我选择的电影,它始终是同一部电影。
答案 0 :(得分:2)
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)
});
}