1

我在这里和网络上进行了一些搜索,但要么我使用了错误的关键字,要么 MVVM 上的大多数示例只处理一个模型。

我的项目中有两个模型(MVVM 上的自学项目), 歌曲模型和艺术家模型。到目前为止,能够将列表视图与信息集合(来自歌曲)绑定,这样当用户单击列表视图上的一行时,有关歌曲的信息会填充在几个文本框控件中。

我面临的问题是如何在两个模型之间进行通信?如果我们将模型视为具有列/字段的表,那么我应该能够创建对艺术家模型(外键)的引用,但我没有得到的是当我 cilck 时如何检索有关艺术家的信息在列表视图中他的歌曲?

长话短说,我喜欢在列表视图中单击显示歌曲列表的一行,然后获取其歌手/艺术家的照片、他的真实姓名等。我没有遵循如何查找相关数据背后的概念艺术家模型中的歌曲。

任何建议都会受到赞赏。

这就是我现在所拥有的:

public class Song
{
    string _singerId;
    string _singerName;
    string _songName;
    string _songWriter;
    string _genre; 
    int _songYear; 
    Artist artistReference;

然后我有:

public class Artist
{

    string _artistBirthName;
    string _artistNationality;
    string _artistImageFile;
    DateTime _artistDateOfBirth;
    DateTime _artistDateOfDeath;
    bool _isArtistAlive; 

谢谢。

编辑:

以下是我提供信息的方式:

问题是如何在歌曲收藏中插入艺术家参考?

        Artists = new ObservableCollection<Artist>()
        {
            new Artist() { ArtistBirthName = "Francis Albert Sinatra", ArtistNickName = "Ol' Blue Eyes", ArtistNationality = "American", ... },
            new Artist() { ArtistBirthName = "Elvis Aaron Presley", ArtistNickName = "", ArtistNationality = "American", ... },
            new Artist() { ArtistBirthName = "James Paul McCartney", ArtistNickName = "", ArtistNationality = "British", ... },
            new Artist() { ArtistBirthName = "Thomas John Woodward", ArtistNickName = "", ArtistNationality = "British", ... }
        };

        //later read it from xml file or a table.
        Songs = new ObservableCollection<Song>()
        {
            new Song() {ARTIST INFO GOES HERE? HOW?, SingerName = "Fank Sinatra", SongName="Fly me to the Moon", SongWriterName="Bart Howard", Genre="Jazz" ,YearOfRelease= 1980 },
            new Song() {SingerName = "Elvis Presley", SongName="Can't Help Falling in Love", SongWriterName="Paul Anka", Genre="Pop", YearOfRelease= 1969},
            new Song() {SingerName = "The Beatles", SongName="Let It Be", SongWriterName="John Lennon", Genre="Rock", YearOfRelease= 1970},
            new Song() {SingerName = "Tom Jones", SongName="Its Not Unusual", SongWriterName="Les Reed & Gordon Mills", Genre="Pop" , YearOfRelease= 1965}
        };
4

1 回答 1

1

我要么在这里遗漏了一些东西,要么你只是在寻找真正没有的困难。:) 创建歌曲对象时,只需将艺术家传递给它。例如Artist artist1 = new Artist(...); Song song1 = new Song(..., artist1);

您当然要先定义构造函数。

编辑:编辑后:)

你可以这样做:

 using System.Linq; // For lambda operations

 (...)

 Songs = new ObservableCollection<Song>()
 {
    new Song() {Artist = Artists.FirstOrDefault(x => x.Name == "Francis Albert Sinatra"), SingerName = ...}
    (...)
 }

Artists.FirstOrDefault(...)部分是一个 LINQ 查询。它遍历Artists集合并选择集合中与条件匹配的第一个项目。如果没有找到匹配项,则使用默认值,该值应为 NULL。不过,最好给每个艺术家一个唯一的 ID 并用它而不是名称进行搜索,因为可以有更多同名的艺术家。如果您有更多问题,请不要犹豫!

于 2013-08-20T18:01:58.300 回答