2013-08-20 1 views
1

여기도 웹에서 검색했지만 잘못된 키워드를 사용하거나 MVVM의 예제 중 대부분은 한 모델 만 처리합니다. 내 프로젝트의 두 가지 모델 (MVVM에 자기 학습 프로젝트), 노래 모델과 아티스트 모델을 데2 개 모델 이상으로 작업하는 방법은 무엇입니까?

. 지금까지 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} 
     }; 

답변

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를 지정하고 검색하는 것이 좋습니다. 질문이 있으시면 언제든지 물어보십시오!

+0

나를 위해 클릭하지 않는 한 가지 방법은 노래가 모든 아티스트 행에서 아티스트 정보를 찾는 방법입니다. 여기서는 학습 목적을 위해 노래와 아티스트 컬렉션을 수동으로 생성합니다. 웹 서비스 또는 XML 파일에서이 정보를 소스에서 가져 오는 경우에는 어떻습니까? –

+0

나는 또한 나의 질문을 편집했다. 하단에는 내가 다루고있는 콜렉션의 종류가 표시되며 거기에 참조를 추가 할 수있는 방법을 알고 싶습니다.나는 그것이 지금 분명하기를 바란다. –

+0

그에 따라 내 대답을 편집했습니다. –

관련 문제