public void Navigate_To_Last()
        {
            var navigationSource = new NavigationSource();
            var commands         = new NavigationSourceCommands(navigationSource);

            MyNavViewModelA.Reset();
            MyNavViewModelB.Reset();
            MyNavViewModelC.Reset();

            commands.NavigateCommand.Execute(typeof(MyNavViewModelA));
            commands.NavigateCommand.Execute(typeof(MyNavViewModelB));
            commands.NavigateCommand.Execute(typeof(MyNavViewModelC));
            commands.MoveToPreviousCommand.Execute(null);
            commands.MoveToPreviousCommand.Execute(null);

            MyNavViewModelA.Reset();
            MyNavViewModelB.Reset();
            MyNavViewModelC.Reset();

            Assert.AreEqual(false, commands.MoveToFirstCommand.CanExecute(null));
            Assert.AreEqual(false, commands.MoveToPreviousCommand.CanExecute(null));
            Assert.AreEqual(true, commands.MoveToNextCommand.CanExecute(null));
            Assert.AreEqual(true, commands.MoveToLastCommand.CanExecute(null));
            commands.MoveToLastCommand.Execute(null);
            Assert.AreEqual(true, MyNavViewModelA.IsOnNavigatingFromInvoked);
            Assert.AreEqual(true, MyNavViewModelC.IsOnNavigatedToInvoked);
            Assert.AreEqual(true, commands.MoveToFirstCommand.CanExecute(null));
            Assert.AreEqual(true, commands.MoveToPreviousCommand.CanExecute(null));
            Assert.AreEqual(false, commands.MoveToNextCommand.CanExecute(null));
            Assert.AreEqual(false, commands.MoveToLastCommand.CanExecute(null));
        }
        public void Commands_With_Views_To_Last()
        {
            var navigationSourceContainer = new NavigationSourceContainer();
            var n1 = new NavigationSource();
            var n2 = new NavigationSource();

            navigationSourceContainer.Register(n1);
            navigationSourceContainer.Register(n2);
            var commands = new NavigationSourceContainerCommands(navigationSourceContainer);

            MyNavViewA.Reset();
            MyNavViewB.Reset();
            MyNavViewC.Reset();
            MyNavViewModelA.Reset();
            MyNavViewModelB.Reset();
            MyNavViewModelC.Reset();

            Assert.AreEqual(0, n1.Sources.Count);
            Assert.AreEqual(0, n2.Sources.Count);
            Assert.AreEqual(-1, n1.CurrentIndex);
            Assert.AreEqual(-1, n2.CurrentIndex);

            commands.NavigateCommand.Execute(typeof(MyNavViewA)); // navigate
            commands.NavigateCommand.Execute(typeof(MyNavViewB));
            commands.NavigateCommand.Execute(typeof(MyNavViewC));
            commands.MoveToPreviousCommand.Execute(null); // previous
            commands.MoveToPreviousCommand.Execute(null); // previous // A

            MyNavViewA.Reset();
            MyNavViewB.Reset();
            MyNavViewC.Reset();
            MyNavViewModelA.Reset();
            MyNavViewModelB.Reset();
            MyNavViewModelC.Reset();

            commands.MoveToLastCommand.Execute(null); // next
            Assert.AreEqual(true, MyNavViewC.IsCanActivateInvoked);
            Assert.AreEqual(typeof(MyNavViewC), n1.Current.GetType());
            Assert.AreEqual(typeof(MyNavViewC), n2.Current.GetType());
        }