private void InitializeCommands()
        {
            PauseCommand = new RelayCommand <IDownloadingFile>(
                item => OperateTaskToken(item, token => token.Suspend(), "Pause task failed."), // TODO: [I18N]
                item => item.DownloadInfo.Status == TransferStatus.Transferring ||
                item.DownloadInfo.Status == TransferStatus.Ready);

            StartCommand = new RelayCommand <IDownloadingFile>(
                item => OperateTaskToken(item, token => token.Ready(), "Restart task failed."),
                item => item.DownloadInfo.Status == TransferStatus.Suspended);

            StartForceCommand = new RelayCommand <IDownloadingFile>(
                item => OperateTaskToken(item, token => token.AsNext(), "Jump queue failed."),
                item => item.DownloadInfo.Status != TransferStatus.Transferring);

            CancelCommand = new RelayCommand <IDownloadingFile>(
                item => OperateTaskToken(item, token => token.Dispose(), "Cancel task failed."));

            PauseAllCommand = new RelayCommand(
                () => TransferTasks.ForEach(item => PauseCommand.Invoke(item)),
                () => TransferTasks?.Any() ?? false);

            CancelAllCommand = new RelayCommand(
                () => TransferTasks.ForEach(item => CancelCommand.Invoke(item)),
                () => TransferTasks?.Any() ?? false);
        }