private void RegisterCommands()
        {
            BlinkGoBackButtonCommand = new DelegateCommand(() =>
            {
                GoPreviousImage();
            });
            BlinkGoNextButtonCommand = new DelegateCommand(() =>
            {
                GoNextImage();
            });
            BuildBookContextMenuCommand = new DelegateCommand <ContextMenuEventArgs>(args =>
            {
                BuildContextMenus_Books();
                (args.Source as FrameworkElement).ContextMenu.IsOpen = true;
            });
            BuildContentsContextMenuCommand = new DelegateCommand <ContextMenuEventArgs>(args =>
            {
                BuildContextMenus_Contents();
                (args.Source as FrameworkElement).ContextMenu.IsOpen = true;
            });
            ChangeStarCommand = new DelegateCommand <ObservableCollection <BookViewModel> >(args =>
            {
                IDialogResult result         = new DialogResult();
                IDialogParameters parameters = new DialogParameters();
                parameters.Add("Book", args.First());
                dialogService.ShowDialog(nameof(ChangeStar), parameters, ret => result = ret);
                UpdateStarLevel();
            });
            CloseTabCommand = new DelegateCommand(() =>
            {
                MainWindowViewModel.Value.CloseTab(this);
            });
            CloseSearchPaneCommand = new DelegateCommand(() =>
            {
                CloseSearchPane();
            });
            DropCommand.Subscribe(args =>
            {
                foreach (var dropPlugin in DropPlugins)
                {
                    dropPlugin.Value.Execute(args.Data);
                }
            })
            .AddTo(disposables);
            ExportBooksCommand = new DelegateCommand(() =>
            {
                var books = BookListViewSelectedItems;
                OpenExportDialog(books.ToArray());
            });
            FilterBooksCommand = new DelegateCommand(() =>
            {
                MainWindowViewModel.Value.NewContentTab(BookListViewSelectedItems);
            });
            LeftKeyDownCommand = new DelegateCommand(() =>
            {
                if (OpenedPage != null)
                {
                    GoPreviousImage();
                }
                else if (OpenedBook != null)
                {
                    //Do nothing
                }
                else
                {
                    //Do nothing
                }
            });
            MouseWheelCommand = new DelegateCommand <MouseWheelEventArgs>(args =>
            {
                var delta = args.Delta;

                if (OpenedPage != null)
                {
                    if (delta > 0) //奥方向に回転
                    {
                        GoPreviousImage();
                    }
                    else if (delta < 0) //手前方向に回転
                    {
                        GoNextImage();
                    }
                }
                else if (OpenedBook != null)
                {
                    //Do nothing
                }
                else
                {
                    //Do nothing
                }
            });
            OpenBookCommand = new DelegateCommand(() =>
            {
                OpenBook(BookListViewSelectedItems.First());
            });
            OpenBookInNewTabCommand = new DelegateCommand(() =>
            {
                MainWindowViewModel.Value.NewContentTab(BookListViewSelectedItems.First());
                MainWindowViewModel.Value.ActiveDocumentViewModel.OpenBook(BookListViewSelectedItems.First());
            });
            OpenBookPropertyDialogCommand = new DelegateCommand(() =>
            {
                var books = BookListViewSelectedItems;
                OpenBookPropertyDialog(books.First());
            });
            OpenImageByDefaultProgramCommand = new DelegateCommand <object>((p) =>
            {
                OpenImageByDefaultProgram(p as IEnumerable <PageViewModel>);
            });
            OpenSearchPaneCommand = new DelegateCommand(() =>
            {
                OpenSearchPane();
            });
            RightKeyDownCommand = new DelegateCommand(() =>
            {
                if (OpenedPage != null)
                {
                    GoNextImage();
                }
                else if (OpenedBook != null)
                {
                    //Do nothing
                }
                else
                {
                    //Do nothing
                }
            });
            RemakeThumbnailOfBookCommand = new DelegateCommand(async() =>
            {
                var books = BookListViewSelectedItems;
                await RemakeThumbnail(books);
            });
            RemakeThumbnailOfPageCommand = new DelegateCommand(async() =>
            {
                var pages = ContentsListViewSelectedItems;
                await RemakeThumbnail(pages);
            });
            RemoveBookCommand = new DelegateCommand(async() =>
            {
                var books = BookListViewSelectedItems;
                await RemoveBook(books.ToArray());
            });
            RemovePageCommand = new DelegateCommand <object>(async(p) =>
            {
                await RemovePage(p as IEnumerable <PageViewModel>);
            });
            SearchInNewTabCommand = new DelegateCommand(() =>
            {
                MainWindowViewModel.Value.NewSearchTab(BookCabinet.OnStage);
            });
            SendBookToExistTabCommand = new DelegateCommand <IDocumentViewModelBase>(p =>
            {
                foreach (var item in BookListViewSelectedItems)
                {
                    p.BookCabinet.AddToMemory(item);
                }
            });
            SendBookToNewTabCommand = new DelegateCommand(() =>
            {
                MainWindowViewModel.Value.NewContentTab(BookListViewSelectedItems);
            });
            ScrapPagesCommand = new DelegateCommand <object>(async(p) =>
            {
                await ScrapPages(p as IEnumerable <PageViewModel>);
            });
            XButton1MouseButtonDownCommand = new DelegateCommand(() =>
            {
                if (OpenedPage != null)
                {
                    CloseImage();
                }
                else if (OpenedBook != null)
                {
                    CloseBook();
                }
                else
                {
                    if (BookCabinet.IsSearching)
                    {
                        ClearSearchResult();
                        CloseSearchPane();
                        RestoreScrollOffset(BeforeSearchPosition);
                    }
                }
            });
            XButton2MouseButtonDownCommand = new DelegateCommand(() =>
            {
                if (OpenedPage != null)
                {
                    //Do nothing
                }
                else if (OpenedBook != null)
                {
                    //Do nothing
                }
                else
                {
                    //Do nothing
                }
            });
        }
 public void ClearSelectedItems()
 {
     BookListViewSelectedItems.Clear();
     ContentsListViewSelectedItems = new List <PageViewModel>();
 }
 private void UpdateStarLevel()
 {
     StarLevel.Value = BookListViewSelectedItems.Any() ? BookListViewSelectedItems.First().StarLevel : null;
 }