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