/// <summary>
        /// Initializes the singleton application object.  This is the first line of authored code
        /// executed, and as such is the logical equivalent of main() or WinMain().
        /// </summary>
        public App()
        {

            this.InitializeComponent();
            this.Suspending += OnSuspending;


            MainFrame = Window.Current.Content as Frame;

            MainEventRouter.InitFrameNavigator(ref m_MainFrame);

            // Do not repeat app initialization when the Window already has content,
            // just ensure that the window is active

            MainFrame.GetFrameNavigator ().PageInitActions
                .Add(
                    typeof(MainPage),
                    (p, dic) =>
                    {
                        //  p.DefaultViewModel["Title"] = "Ok!,String Index Property Access!";
                        ((MainPage_Model)p.DefaultViewModel).Title   = "Ok!,Strong Type Property Access!";
                    }

                );

        }
        async public override Task<LayoutAwarePage> CreateGame(GameInfomation gameInfomation, Frame targetFrame)
        {

            TradeGameData_Model.ExchangeViewType = typeof(Exchange);
            TradeGameData_Model.SetupGameViewType = typeof(SetupGame);
            TradeGameData_Model vm;
            var storage = new Storages.Storage<TradeGameData_Model>(GetSaveFileName(gameInfomation));

            await storage.Refresh();

            if (storage.Value == null)
            {
                storage.Value = new TradeGameData_Model(storage, gameInfomation);
            }
            vm = storage.Value;
            
            
            EventRouter.Instance.InitFrameNavigator(ref targetFrame);

            var navigator = vm.Navigator = targetFrame.GetFrameNavigator();
            
            navigator.PageInitActions
                = new Dictionary<Type, Action<LayoutAwarePage, IDictionary<string, object>>> 
                {
                    {
                        typeof (SetupGame),
                        (p,dic)=>
                            {
                                var svm = new SetupGame_Model(vm);
                                p.DefaultViewModel = svm;
                            }

                    },
                               
                    {
                        typeof (Exchange),
                        (p,dic)=>
                            {
                                var svm = new SetupGame_Model(vm);
                                p.DefaultViewModel = svm;
                            
                            }

                    },

                     {
                        typeof (ScoreBoard),
                        (p,dic)=>
                            {
                                var svm = new ScoreBoard_Model(vm);
                                p.DefaultViewModel = svm;
                            
                            }

                    },
                };




            var rval = new DefaultTradeGame.Views.TradeGamePage() { DefaultViewModel = vm };
            return rval;

        }
        async public override Task<LayoutAwarePage> CreateGameAndNavigateTo(GameInfomation gameInfomation, Frame targetFrame)
        {


            TradeGamePage_Model vm;
            var storage = new Storage<TradeGameData>(GetSaveFileName(gameInfomation));

            await storage.Refresh();


            vm = new TradeGamePage_Model(storage, gameInfomation);


            EventRouter.Instance.InitFrameNavigator(ref targetFrame);

            var navigator = vm.Navigator = targetFrame.GetFrameNavigator();

            navigator.PageInitActions
                = new Dictionary<Type, Action<LayoutAwarePage, IDictionary<string, object>>> 
                {
                    {
                        typeof (SetupGame),
                        (p,dic)=>
                            {
                                var svm = new SetupGame_Model(vm.GameData);
                                p.DefaultViewModel = svm;
                            }

                    },
                               
                    {
                        typeof (Exchange),
                        (p,dic)=>
                            {
                                var svm = new SetupGame_Model(vm.GameData);
                                p.DefaultViewModel = svm;
                            
                            }

                    },

                     {
                        typeof (ScoreBoard),
                        (p,dic)=>
                            {
                                var svm = new ScoreBoard_Model(vm.GameData);
                                p.DefaultViewModel = svm;
                            
                            }

                    },

                    {
                        typeof (TradeGamePage),
                        (p,dic)=>
                            {
                               
                                p.DefaultViewModel = vm;
                                vm.CommandOnLoadCommand.Execute(null);
                            }

                    },
                };


            await navigator.FrameNavigate(Views.ViewModels.TradeGamePage_Model.TradeGamePageViewType, vm, null);



            return targetFrame.Content as LayoutAwarePage;

        }