如何使用2个或更多型号

本文关键字:多型 何使用 2个 | 更新日期: 2023-09-27 18:28:19

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

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

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

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

任何建议都将受到重视。

这就是我现在拥有的:

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

如何使用2个或更多型号

我要么在这里错过了什么,要么你只是在寻找真正没有的困难。:)创建歌曲对象时,只需将艺术家传递给它。例如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,并根据它而不是名字进行搜索,因为可能会有更多的艺术家使用相同的名字。如果你有更多的问题,请不要犹豫!