public MemorizationPageViewModel(IDeck deck, ITimeTracker timeTracker, ICardAssociationRepository repo) : this() { _timeTracker = timeTracker; _deck = deck; _cardAssociationRepository = repo; }
static void SetupMemorizationPageViewModel(Connection connection, ICardAssociationRepository cardAssociationRepository) { MemorizationPageViewModel memorizationPageViewModel = null; connection.OnAsync <dynamic>("memorization.start", async options => { memorizationPageViewModel = new MemorizationPageViewModel(); memorizationPageViewModel.CardAssocationRepository = cardAssociationRepository; await memorizationPageViewModel.LoadCardAssociationsAsync(); memorizationPageViewModel.InitDeck( (bool)options.IncludeSpades, (bool)options.IncludeDiamonds, (bool)options.IncludeClubs, (bool)options.IncludeHearts); //send initial value for properties in view model: connection.Send("memorization.currentCard", memorizationPageViewModel.CurrentCard); connection.Send("memorization.cardAssociation", memorizationPageViewModel.CardAssociation); connection.Send("memorization.isCurrentCardVisible", memorizationPageViewModel.IsCurrentCardVisible); connection.Send("memorization.isCardAssociationVisible", memorizationPageViewModel.IsCardAssociationVisible); connection.Send("memorization.isLastCard", memorizationPageViewModel.IsLastCard); connection.Send("memorization.cardsNotSeenCount", memorizationPageViewModel.CardsNotSeenCount); connection.Send("memorization.cardsSeen", memorizationPageViewModel.CardsSeen); memorizationPageViewModel.PropertyChanged += (_, propertyChangedEventArgs) => { switch (propertyChangedEventArgs.PropertyName) { case "CurrentCard": connection.Send("memorization.currentCard", memorizationPageViewModel.CurrentCard); break; case "CardAssociation": connection.Send("memorization.cardAssociation", memorizationPageViewModel.CardAssociation); break; case "IsCardAssociationVisible": connection.Send("memorization.isCardAssociationVisible", memorizationPageViewModel.IsCardAssociationVisible); break; case "IsCurrentCardVisible": connection.Send("memorization.isCurrentCardVisible", memorizationPageViewModel.IsCurrentCardVisible); break; case "IsLastCard": connection.Send("memorization.isLastCard", memorizationPageViewModel.IsLastCard); break; case "CardsNotSeenCount": connection.Send("memorization.cardsNotSeenCount", memorizationPageViewModel.CardsNotSeenCount); break; default: Console.Error.WriteLine("Unhandled propertychange event: " + propertyChangedEventArgs.PropertyName); break; } }; memorizationPageViewModel.MemorizationCompleted += (IEnumerable <PlayingCard> cardsMemorized, TimeSpan memorizationTime) => { connection.Send("memorization.complete", new { CardsMemorized = cardsMemorized, MemorizationTime = memorizationTime }); }; memorizationPageViewModel.CardsSeen.CollectionChanged += (e, args) => { connection.Send("memorization.cardsSeen", memorizationPageViewModel.CardsSeen); }; }); connection.On("memorization.ellapsedTime", () => { return(memorizationPageViewModel.EllapsedTime); }); connection.On("memorization.turnCard", () => { if (memorizationPageViewModel.TurnCardCommand.CanExecute(null)) { memorizationPageViewModel.TurnCardCommand.Execute(null); return(true); } return(false); }); connection.On("memorization.stop", () => { if (memorizationPageViewModel.StopCommand.CanExecute(null)) { memorizationPageViewModel.StopCommand.Execute(null); return(true); } return(false); }); connection.On("memorization.toggleIsCardAssociationVisible", () => { memorizationPageViewModel.IsCardAssociationVisible = !memorizationPageViewModel.IsCardAssociationVisible; }); }