我有一个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();
}
这似乎已经解决了这个问题,虽然已经出现了一个新问题,我将在一个单独的问题中发布。