public PlayerController(IShellService shellService, IEnvironmentService environmentService, ISelectionService selectionService, PlayerService playerService, 
     Lazy<PlayerViewModel> playerViewModel, ExportFactory<InfoViewModel> infoViewModelFactory)
 {
     this.shellService = shellService;
     this.environmentService = environmentService;
     this.selectionService = selectionService;
     this.playerService = playerService;
     this.playerViewModel = playerViewModel;
     this.infoViewModelFactory = infoViewModelFactory;
     this.playAllCommand = new DelegateCommand(PlayAll, CanPlayAll);
     this.playSelectedCommand = new DelegateCommand(PlaySelected, CanPlaySelected);
     this.enqueueAllCommand = new DelegateCommand(EnqueueAll, CanEnqueueAll);
     this.enqueueSelectedCommand = new DelegateCommand(EnqueueSelected, CanEnqueueSelected);
     this.previousTrackCommand = new DelegateCommand(PreviousTrack, CanPreviousTrack);
     this.nextTrackCommand = new DelegateCommand(NextTrack, CanNextTrack);
     this.infoCommand = new DelegateCommand(ShowInfo);
 }
        public PlayerView(PlayerService playerService)
        {
            this.InitializeComponent();
            this.viewModel = new Lazy<PlayerViewModel>(() => ViewHelper.GetViewModel<PlayerViewModel>(this));
            this.playerService = playerService;
            this.mediaPlayer = new MediaPlayer();
            this.duratonConverter = new Converters.DurationConverter();

            updateTimer = new DispatcherTimer();
            updateTimer.Interval = TimeSpan.FromMilliseconds(100);
            updateTimer.Tick += UpdateTimerTick;

            throttledSliderValueChangedAction = new ThrottledAction(ThrottledSliderValueChanged, ThrottledActionMode.InvokeMaxEveryDelayTime, TimeSpan.FromMilliseconds(100));

            previousCommand = new DelegateCommand(Previous, CanPrevious);
            playPauseCommand = new DelegateCommand(PlayPause, CanPlayPause);
            nextCommand = new DelegateCommand(Next, CanNext);
            playerService.PreviousCommand = previousCommand;
            playerService.PlayPauseCommand = playPauseCommand;
            playerService.NextCommand = nextCommand;
            playerService.IsPlayCommand = true;
            
            Loaded += FirstTimeLoadedHandler;
        }