Создать Viewmodel из контроллера / модели. Заполнить списки из базы данных - PullRequest
0 голосов
/ 14 октября 2019

Я работаю над своим первым приложением WPF MVVM. Я создал базу данных и написал запросы для получения названий альбомов и названий песен. Теперь я хочу заполнить список в моем виде именами альбомов, а второй список - соответствующими песнями. Я новичок в C # и WPF. Я хотел бы знать, как должна выглядеть модель представления для моего контроллера.

Мой контроллер:

    public class BandManagerController
    {
        private bandkramEntities _context;

        public BandManagerController()
        {
            _context = new bandkramEntities();
        }

        public List<AlbumData> GetAlbumList()     
        {
            return _context.albums
                .Select(a => new AlbumData
                {
                    AlbumID = a.AlbumID,
                    AlbumName = a.AlbumName,
                })
                .ToList();
        }

        public List<SongData> GetSongList(int albumID)
        {
            return _context.songs
                .Where(s => s.AlbumID == albumID)
                .Select(s => new SongData
                {
                    SongID = s.SongID,
                    SongName = s.SongName
                })
                .ToList();
        }
    }

Я создал вспомогательный класс с классом NotifyOfPropertyChange и композицией икласс данных альбома:

AlbumData.cs

    public class AlbumData
    {
        public string AlbumName { get; set; }

        public int AlbumID { get; set; }
    }

SongData.cs

    public class SongData
    { 
            public string SongName { get; set; }

            public int SongID { get; set; }            
    } 

Для лучшего обзора я хочу разделить мою Viewmodel на 4 основные части.

  1. SongViewModel.cs
    public class SongViewModel : NotifyOfPropertyChange
    {
        public SongViewModel()
        {

        }

        public string SongName { get; set; }

        public int SongID { get; set; }
    }
AlbumViewModel.cs
    public class AlbumViewModel : NotifyOfPropertyChange
    {
        public AlbumViewModel()
        {

        }

        public string AlbumName { get; set; }

        public int AlbumID { get; set; }
    } 
SongListViewModel.cs AlbumListViewModel.cs

Я хотел бы знать, как должны выглядеть 3. и 4. чтобы заполнить список альбомов именами альбомов ипоказать соответствующие песни во втором списке.

1 Ответ

0 голосов
/ 14 октября 2019

С MVVM вы потеряете контроллер и просто получите ViewModel. Там вы будете иметь свои списки как таковые (включая измененное свойство уведомления)

  private ObservableCollection<SongData> _songList;
  public ObservableCollection<SongData> SongList
  {
    get { return _songList; }
    set { SetProperty(ref _songList, value, () => SongList); }
  }

Тогда вы будете загружать этот список в какой-то момент

public void LoadSongData(int albumID)
    {
     Using(YourContext _context = new YourContext)
     {
        SongList = new ObservableCollection(_context.songs
            .Where(s => s.AlbumID == albumID)
            .Select(s => new SongData
            {
                SongID = s.SongID,
                SongName = s.SongName
            })
            .ToList());
      }
    }
...