0

我有一个 windows phone 7 应用程序,我正在使用 mvvm light 作为我的视图模型。我有一个 MainPage,视图模型是 MainViewModel;

在我的视图模型中,我有这样的东西

Public MainViewModel()
{
    if(IsInDesignMode)
    {
        // blah blah
    }
    else
    {
       MediaLibrary ml = new MediaLibrary();
       Songs = ml.Songs;
       ArtisList = ml.Artists;
       PlayLists = ml.Playlists;

       foreach(Album a in ml.Albums)
            MyAlbums.Add(new AlbumItem(a));

        GetCurrentSongInfo();

        MessageBox.Show("I am in View Model");
    }

    public void GetCurrentSongInfo()
    { 
        // Do stuff to get the current song playing
     }
}

 public class AlbumItem
 {
    public string Title {get;set;}
    public string Artist {get;set;}
    public BitmapImage AlbumArt {get;set;}

    public AlbumItem(Album)
    {
       this.Title = Album.Name;
       this.Artist = Album.Artist.Name;

       if(Album.HasArt)
       {
           BitmapImage bmp = new BitmapImage();
           bmp.SetSource(Album.GetAlbumArt());

           AlbumArt = bmp;
       }
    }        
 }

现在,如果我将手机连接到我的 PC 并调试应用程序,我会看到MessageBox它应该出现的样子。

如果我然后关闭调试器,拔掉我的手机,然后在手机上运行应用程序,我会看到MessageBox出现两次!为什么会出现两次?

编辑:我相信我已经解决了我的问题,但如果有人能告诉我为什么,那就太好了。首先,我更新了上面的代码,以提供更多关于我在做什么的细节。然后我修改了该代码,使其看起来像这样。

Public MainViewModel()
{
    if(IsInDesignMode)
    {
        // blah blah
    }
    else
    {       
        MessageBox.Show("I am in View Model");
    }

    public void GetMusic()
    { 
       MediaLibrary ml = new MediaLibrary();
       Songs = ml.Songs;
       ArtisList = ml.Artists;
       PlayLists = ml.Playlists;

       foreach(Album a in ml.Albums)
            MyAlbums.Add(new AlbumItem(a));

        GetCurrentSongInfo();
    }

    public void GetCurrentSongInfo()
    { 
        // Do stuff to get the current song playing
    }
}

 public class AlbumItem
 {
    public string Title {get;set;}
    public string Artist {get;set;}
    public BitmapImage AlbumArt {get;set;}

    public AlbumItem(Album)
    {
       this.Title = Album.Name;
       this.Artist = Album.Artist.Name;

       if(Album.HasArt)
       {
           BitmapImage bmp = new BitmapImage();
           bmp.SetSource(Album.GetAlbumArt());

           AlbumArt = bmp;
       }
    }        
 }

然后在 Page.Loaded 事件中我会这样做。

void MainPage_Loaded(object sender, RoutedEventArgs e)
{    
    mvm.GetMusic();
}

这似乎已经解决了这个问题,尽管发生了一个新问题,我将在一个单独的问题中发布。

4

0 回答 0