/// <summary>
        /// Creates an instance of <see cref="FeatsViewModel"/>
        /// </summary>
        public FeatsViewModel(Compendium compendium, FeatSearchService classSearchService, FeatSearchInput featSearchInput,
                              StringService stringService, DialogService dialogService, XMLImporter xmlImporter, XMLExporter xmlExporter)
        {
            _compendium        = compendium;
            _featSearchService = classSearchService;
            _featSearchInput   = featSearchInput;
            _stringService     = stringService;
            _dialogService     = dialogService;
            _xmlImporter       = xmlImporter;
            _xmlExporter       = xmlExporter;

            _selectFeatCommand     = new RelayCommand(obj => true, obj => SelectFeat(obj as FeatListItemViewModel));
            _editFeatCommand       = new RelayCommand(obj => true, obj => EditFeat(obj as FeatViewModel));
            _exportFeatCommand     = new RelayCommand(obj => true, obj => ExportFeat(obj as FeatViewModel));
            _cancelEditFeatCommand = new RelayCommand(obj => true, obj => CancelEditFeat());
            _saveEditFeatCommand   = new RelayCommand(obj => HasUnsavedChanges, obj => SaveEditFeat());
            _resetFiltersCommand   = new RelayCommand(obj => true, obj => InitializeSearch());
            _addCommand            = new RelayCommand(obj => true, obj => Add());
            _copyCommand           = new RelayCommand(obj => _selectedFeat != null, obj => Copy());
            _deleteCommand         = new RelayCommand(obj => _selectedFeat != null, obj => Delete());
            _importCommand         = new RelayCommand(obj => true, obj => Import());
            _selectNextCommand     = new RelayCommand(obj => true, obj => SelectNext());
            _selectPreviousCommand = new RelayCommand(obj => true, obj => SelectPrevious());

            Search();
        }
 /// <summary>
 /// True if the search input applies to the model
 /// </summary>
 public bool SearchInputApplies(FeatSearchInput searchInput, FeatModel featModel)
 {
     return(HasSearchText(featModel, searchInput.SearchText) &&
            PrerequisiteMatches(featModel, searchInput.Prerequisite.Key));
 }
 /// <summary>
 /// Searches the compendium for feats matching the search input
 /// </summary>
 public List <FeatModel> Search(FeatSearchInput searchInput)
 {
     return(Sort(_compendium.Feats.Where(x => SearchInputApplies(searchInput, x)), searchInput.SortOption.Key));
 }