public GenreDetailViewModel(IEventAggregator eventAggregator,
                                    ILogger logger,
                                    IGenreService domainService,
                                    IGenreLookupDataService genreLookupDataService,
                                    IDialogService dialogService)
            : base(eventAggregator, logger, domainService, dialogService)
        {
            _genreLookupDataService  = genreLookupDataService ?? throw new ArgumentNullException(nameof(genreLookupDataService));
            ChangeEditedGenreCommand = new DelegateCommand <Guid?>(OnChangeEditedGenreExecute);
            SaveItemCommand          = new DelegateCommand(SaveItemExecute, base.SaveItemCanExecute)
                                       .ObservesProperty(() => SelectedItem.Name);

            SelectedItem = CreateWrapper(domainService.CreateItem());

            Genres = new ObservableCollection <LookupItem>();

            UserMode = (!UserMode.Item1, DetailViewState.EditMode, Brushes.LightGray, !UserMode.Item4).ToTuple();
        }