Не могу преобразовать строку в viewmodel - PullRequest
1 голос
/ 11 марта 2019

У меня есть программа, которая должна отображать файлы в виде списка. Мой код выглядит следующим образом, и я получаю сообщение об ошибке «не могу преобразовать строку в 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.

Класс ViewModel:

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

1 Ответ

0 голосов
/ 11 марта 2019

Добавьте фактический Movie объект к ListView, используя AddItem(moviee), а затем используйте свойство DisplayMemberPath, чтобы указать, что вы хотите отобразить значение свойства MovieName:

<ListView ... DisplayMemberPath="MovieName" .... />
...