C# 如何使用2个或更多型号?

C# 如何使用2个或更多型号?,c#,wpf,mvvm,model,C#,Wpf,Mvvm,Model,我在这里做了一些搜索,也在网上做了一些搜索,但要么我使用了错误的关键字,要么MVVM上的大多数示例只涉及一种模型 我的项目中有两个模型(MVVM上的自学项目),歌曲模型和艺术家模型。到目前为止,我们已经能够将listview与一组信息(来自歌曲)绑定在一起,这样当用户单击listview上的一行时,有关歌曲的信息就会填充在几个文本框控件中 我面临的问题是,如何在两个模型之间进行通信?如果我们把一个模型看作一个具有它的列/字段的表,那么我应该能够创建一个对艺术家模型(外键)的引用,但是我没有得到的

我在这里做了一些搜索,也在网上做了一些搜索,但要么我使用了错误的关键字,要么MVVM上的大多数示例只涉及一种模型

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

我面临的问题是,如何在两个模型之间进行通信?如果我们把一个模型看作一个具有它的列/字段的表,那么我应该能够创建一个对艺术家模型(外键)的引用,但是我没有得到的是,当我在ListVIEW

中查看他的歌曲时,我如何检索一个艺术家的信息。 长话短说,我喜欢点击listview中显示歌曲列表的一行,然后获取其歌手/艺术家的照片、他的真实姓名等。我不理解如何在艺术家模型中查找歌曲相关数据的概念

任何建议都将被告知

这就是我现在拥有的:

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}
        };
Artists=newobserveCollection()
{
新艺术家(){ArtistBirthName=“Francis Albert Sinatra”,Artist昵称=“Ol'Blue Eyes”,artistNational=“American”,…},
新艺术家(){ArtistBirthName=“Elvis Aaron Presley”,ArtistNickName=“”,ArtistNational=“American”,…},
新艺术家(){ArtistBirthName=“James Paul McCartney”,ArtistNickName=“”,ArtistNational=“British”,…},
新艺术家()
};
//稍后从xml文件或表中读取它。
Songs=新的ObservableCollection()
{
新歌(){Artister INFO GOES HERE?HOW?、SingerName=“Fank Sinatra”、SongName=“Fly me to Moon”、SongWriterName=“Bart Howard”、Genre=“Jazz”、Yearofree=1980},
新歌(){SingerName=“猫王”,SongName=“情不自禁地坠入爱河”,SongWriterName=“保罗·安卡”,Genre=“流行”,YearOfRelease=1969},
新歌(){SingerName=“披头士乐队”,SongName=“顺其自然”,SongWriterName=“约翰·列侬”,Genre=“摇滚”,YearOfRelease=1970},
新歌()
};

我要么在这里遗漏了什么,要么你只是在寻找真正没有困难的地方。:)创建歌曲对象时,只需将艺术家传递给它。例如
artistartist1=新艺术家(…);Song song1=新歌(…,艺人1)

当然,您需要首先定义构造函数

编辑:编辑后:)

您可以这样做:

 using System.Linq; // For lambda operations

 (...)

 Songs = new ObservableCollection<Song>()
 {
    new Song() {Artist = Artists.FirstOrDefault(x => x.Name == "Francis Albert Sinatra"), SingerName = ...}
    (...)
 }
使用System.Linq;//用于lambda操作
(...)
Songs=新的ObservableCollection()
{
新歌(){Artist=Artists.FirstOrDefault(x=>x.Name==“Francis Albert Sinatra”),SingerName=…}
(...)
}

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

我不是错过了什么,就是你只是在寻找真正没有困难的地方。:)创建歌曲对象时,只需将艺术家传递给它。例如
artistartist1=新艺术家(…);Song song1=新歌(…,艺人1)

当然,您需要首先定义构造函数

编辑:编辑后:)

您可以这样做:

 using System.Linq; // For lambda operations

 (...)

 Songs = new ObservableCollection<Song>()
 {
    new Song() {Artist = Artists.FirstOrDefault(x => x.Name == "Francis Albert Sinatra"), SingerName = ...}
    (...)
 }
使用System.Linq;//用于lambda操作
(...)
Songs=新的ObservableCollection()
{
新歌(){Artist=Artists.FirstOrDefault(x=>x.Name==“Francis Albert Sinatra”),SingerName=…}
(...)
}

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

也许,但有一件事我不喜欢,那就是一首歌是如何在所有艺术家行中找到艺术家信息的?在这里,我手动创建歌曲和艺术家收藏,用于学习;如果从web服务或xml文件的源获取此信息,情况如何?我也编辑了我的问题。在底部,您将看到我正在处理的收藏类型,并想知道如何在其中添加引用。我希望现在一切都清楚了,现在一切都有意义了。问题是我从来没有使用过lambda,但这应该会让我继续。谢谢你,我很快会回复你。试试看,LINQ(语言集成查询)是你在C#中能找到的最强大的工具之一。别忘了告诉我事情的进展情况。:)好的,我今天有机会回到代码上来,我完全理解它背后的逻辑,但我想这样做,当用户点击listview中的一行时。我已经改变了模型,使宋有两个ID一个是SongID,一个是ArtistID(外键)。当然,艺术家模型有自己的ID,它与歌曲模型中的ArtistID绑定。瞿