public CatalogViewModel()
        {
            ViewOffersByCatalog        = true;
            ViewOffersByCatalogEnabled = Settings.Select(s => s.CanViewOffersByCatalogName).ToValue();

            this.ObservableForProperty(m => m.Mode).Subscribe(x =>
            {
                CatalogSelectorVisible.Value = Mode == CatalogViewMode.CatalogSelector;
                AddToAwaitedVisible.Value    = Mode == CatalogViewMode.Basic;
                ShowAwaitedVisible.Value     = Mode == CatalogViewMode.Basic;
            });


            DisplayName = "Поиск препаратов в каталоге";
            Filters     = new[] {
                new FilterDeclaration("Все"),
                new FilterDeclaration("Жизненно важные", "жизненно важным", "только жизненно важные",
                                      FilterType.VitallyImportant),
                new FilterDeclaration("Обязательный ассортимент", "обязательному ассортименту", "только обязательные ассортимент",
                                      FilterType.Mandatory),
                new FilterDeclaration("Ожидаемые позиции", "ожидаемым позициям", "только ожидаемые позиции",
                                      FilterType.Awaited),
                new FilterDeclaration("ПКУ", "ПКУ", "только ПКУ",
                                      FilterType.PKU),
                new FilterDeclaration("ПКУ:Наркотические и психотропные",
                                      "ПКУ:Наркотические и психотропные",
                                      "только ПКУ:Наркотические и психотропные",
                                      FilterType.PKUNarcotic),
                new FilterDeclaration("ПКУ:Сильнодействующие. и ядовитые",
                                      "ПКУ:Сильнодействующие. и ядовитые",
                                      "только ПКУ:Сильнодействующие. и ядовитые",
                                      FilterType.PKUToxic),
                new FilterDeclaration("ПКУ:Комбинированные", "ПКУ:Комбинированные", "только ПКУ:Комбинированные",
                                      FilterType.PKUCombined),
                new FilterDeclaration("ПКУ:Иные лек.средства", "ПКУ:Иные лек.средства", "только ПКУ:Иные лек.средства",
                                      FilterType.PKUOther),
            };
            CurrentFilter = Filters[0];

            CatalogSearch = new NotifyValue <bool>();
            this.ObservableForProperty(m => m.ActiveItem)
            .Select(i => i.Value != null ? i.Value.CanExport : Observable.Return(false))
            .Switch()
            .Subscribe(CanExport);
            CatalogSearch.CatchSubscribe(_ => UpdateActiveItem(), CloseCancellation);

            CanAddToAwaited = this
                              .ObservableForProperty(m => (object)m.CurrentCatalog, skipInitial: false)
                              .Merge(this.ObservableForProperty(m => (object)m.CurrentCatalogName))
                              .Select(v => GuessCatalog() != null)
                              .ToValue();

            CanCatalogSelector = this
                                 .ObservableForProperty(m => (object)m.CurrentCatalog, skipInitial: false)
                                 .Merge(this.ObservableForProperty(m => (object)m.CurrentCatalogName))
                                 .Select(v => CurrentCatalog != null)
                                 .ToValue();

            this.ObservableForProperty(m => m.CurrentCatalogName)
            .Subscribe(_ => NotifyOfPropertyChange("CanShowDescription"));

            ViewOffersByCatalogVisible = CatalogSearch.Select(v => !v)
                                         .ToValue();

            OnCloseDisposable.Add(Disposable.Create(() => {
                if (ActiveItem is IDisposable)
                {
                    ((IDisposable)ActiveItem).Dispose();
                }
            }));
            IsEnabled = new NotifyValue <bool>(true);
            InitFields();
            Mode = CatalogViewMode.Basic;
        }