我正在使用WinRT Caliburn.Micro开发一个 Windows 应用商店应用游戏,并且我依赖于导航框架。
我有游戏设置(定义玩家)和实际游戏的视图模型。从设置导航到游戏时,我想将玩家集合传递给游戏视图模型。我怎样才能做到这一点?
从示意图上看,我的视图模型目前如下所示:
public class SetupGameViewModel : NavigationViewModelBase
{
public SetupGameViewModel(INavigationService ns) : base(ns) { }
public IObservableCollection<Player> Players { get; set; }
public void StartGame()
{
// This is as far as I've got...
base.NavigationService.NavigateToViewModel<GameViewModel>();
// How can I pass the Players collection from here to the GameViewModel?
}
}
public class GameViewModel : NavigationViewModelBase
{
public GameViewModel(INavigationService ns) : base(ns) { }
public ScoreBoardViewModel ScoreBoard { get; private set; }
public void InitializeScoreBoard(IEnumerable<Player> players)
{
ScoreBoard = new ScoreBoardViewModel(players);
}
}
理想情况下,我想InitializeScoreBoard
从GameViewModel
构造函数中调用,但据我所知,不可能将SetupGameViewModel.Players
集合传递给GameViewModel
构造函数。
( INavigationService.NavigateToViewModel<T>
extension) 方法可选地接受一个[object] parameter
参数,但这个参数似乎没有到达导航到的视图模型构造函数。而且我也无法弄清楚如何GameViewModel.InitializeScoreBoard
从SetupGameViewModel.StartGame
方法中显式调用方法,因为GameViewModel
在这个阶段还没有初始化。