MVVM视图模型被调用两次但在调试时只调用一次?

时间:2013-06-27 12:37:02

标签: c# windows-phone-7 mvvm-light

我有一个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 Event中我会这样做。

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

这似乎已经解决了这个问题,虽然已经出现了一个新问题,我将在一个单独的问题中发布。

0 个答案:

没有答案