无法将字符串隐式转换为视图模型
Can´t implicity convert string to viewmodel
我有一个程序可以在列表视图中显示文件。
我的代码看起来像这样,但出现错误 "cannot convert from string into viewmodel" 如果我将 Additem(movies.MovieName) 更改为 Additem(movies),我不会收到错误,但它只会写出“MoviePlayerModule.ViewModelsMoviesViewModel”。
我希望它写入从 movies.MovieName = filename;
获得的文件名
private void ReadMediaFile()
{
var movies = new MoviesViewModel();
string[] files = Directory.GetFiles(Paths.Root);
foreach (var file in files)
{
var filename = Path.GetFileName(file);
movies.MovieName = filename;
};
AddItem(movies.MovieName);
}
在文件名中它说:"ATTV_bog.mpg" 那是文件夹中的 mpg 文件。
如果我更改代码,它看起来像这样:
var moviee = new MoviesViewModel();
string[] files = Directory.GetFiles(@"C:/Users/v80770/Desktop/Movies");
foreach (var file in files)
{
var filename = file;
moviee.MovieName = filename;
};
AddItem(moviee);
输出就是MoviePlayer.ViewModels.MoviesViewModel
在我看来代码是这样的:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock x:Name="MovieName" Grid.Column="0" />
</Grid>
我正在使用 CaliburnMicro。
视图模型class:
public class MoviesViewModel : TreeViewNode<MoviesViewModel>
{
public string MovieName { get; set; }
}
查看:
<UserControl x:Class="ClassName.MovieplayerModule.Views.MoviesView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock x:Name="MovieName" Grid.Column="0" />
</Grid>
和AddItem方法,位于TreeViewBase.cs
public void AddItem(T item)
{
_dispatcher.SmartInvoke(() => Items.Add(item));
}
使用 AddItem(moviee)
将实际的 Movie
对象添加到 ListView
,然后使用 DisplayMemberPath
属性 指定要显示的值的 MovieName
属性:
<ListView ... DisplayMemberPath="MovieName" .... />
我有一个程序可以在列表视图中显示文件。 我的代码看起来像这样,但出现错误 "cannot convert from string into viewmodel" 如果我将 Additem(movies.MovieName) 更改为 Additem(movies),我不会收到错误,但它只会写出“MoviePlayerModule.ViewModelsMoviesViewModel”。 我希望它写入从 movies.MovieName = filename;
获得的文件名 private void ReadMediaFile()
{
var movies = new MoviesViewModel();
string[] files = Directory.GetFiles(Paths.Root);
foreach (var file in files)
{
var filename = Path.GetFileName(file);
movies.MovieName = filename;
};
AddItem(movies.MovieName);
}
在文件名中它说:"ATTV_bog.mpg" 那是文件夹中的 mpg 文件。
如果我更改代码,它看起来像这样:
var moviee = new MoviesViewModel();
string[] files = Directory.GetFiles(@"C:/Users/v80770/Desktop/Movies");
foreach (var file in files)
{
var filename = file;
moviee.MovieName = filename;
};
AddItem(moviee);
输出就是MoviePlayer.ViewModels.MoviesViewModel
在我看来代码是这样的:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock x:Name="MovieName" Grid.Column="0" />
</Grid>
我正在使用 CaliburnMicro。
视图模型class:
public class MoviesViewModel : TreeViewNode<MoviesViewModel>
{
public string MovieName { get; set; }
}
查看:
<UserControl x:Class="ClassName.MovieplayerModule.Views.MoviesView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock x:Name="MovieName" Grid.Column="0" />
</Grid>
和AddItem方法,位于TreeViewBase.cs
public void AddItem(T item)
{
_dispatcher.SmartInvoke(() => Items.Add(item));
}
使用 AddItem(moviee)
将实际的 Movie
对象添加到 ListView
,然后使用 DisplayMemberPath
属性 指定要显示的值的 MovieName
属性:
<ListView ... DisplayMemberPath="MovieName" .... />