我正在开发我的第一个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 类和一个歌曲和专辑数据类的帮助程序类:
专辑数据.cs
public class AlbumData
{
public string AlbumName { get; set; }
public int AlbumID { get; set; }
}
歌曲数据.cs
public class SongData
{
public string SongName { get; set; }
public int SongID { get; set; }
}
为了更好地概述,我想将我的视图模型分为 4 个主要部分。
- 歌曲视图模型.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
- 相册列表视图模型.cs
我想知道 3. 和 4. 必须看起来像用专辑名称填充专辑列表并在第二个列表中显示相应的歌曲。
使用 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());
}
}