public ISortersAndFilters GetSorterAndFilterer() { ISortersAndFilters sortAndFilter = null; IEnumerable <IFilterDefinition> filterElements = GetFilters(); IEnumerable <ISorterDefinition> sorterElements = GetSorters(); if (filterElements.Any() || sorterElements.Any()) { sortAndFilter = SortersAndFilterersFactory.CreateInstance(TemplateDefinition, filterElements, sorterElements); } return(sortAndFilter); }
public BindingContext(IBindingContextElement parent, ITemplateView owner, ITemplateDefinition templateDefinition, object dataSource, List <IFilterDefinition> templatedFilters) { try { if (owner == null) { throw new ArgumentNullException("The parameter 'owner' cannot be null"); } if (templateDefinition == null) { throw new ArgumentNullException("The parameter 'templateDefinition' cannot be null"); } Owner = owner; TemplateDefinition = templateDefinition; TemplatedFilters = templatedFilters; IsExpanded = TemplateDefinition.TemplateOption.HeaderAsExpander != HeaderAsExpander.StartClosed; //TemplatedSortsAndFilters = templatedSortsAndFilters; Parent = parent; DataSource = dataSource; if (DataSource != null) { List <object> dataSourceAsList; IBindingDefinition dataSourceType; if (DataSource is IEnumerable) { dataSourceAsList = (DataSource as IEnumerable).Cast <object>().ToList(); dataSourceType = BindingDefinitionRoot.CreateInstance(dataSourceAsList.GetType()); } else { dataSourceAsList = new List <object>(); dataSourceAsList.Add(DataSource); //new object[] { DataSource }; dataSourceType = BindingDefinitionRoot.CreateInstance(DataSource.GetType()); } if (TemplateDefinition.MainBindingDefinition != null) { CheckType(TemplateDefinition.MainBindingDefinition, dataSourceType); } ISortersAndFilters externalSortersAndFilters = null; owner.ExternalSortersAndFilters?.TryGetValue(TemplateDefinition, out externalSortersAndFilters); //Occurrences = dataSourceAsList.Count; if (TemplateDefinition.Body != null) { IEnumerable <IFilterDefinition> templatedFiltersToTakeIntoAccount = null; if (templatedFilters != null) { IEnumerable <IFilterDefinition> templatedFiltersToTakeIntoAccountFound = templatedFilters.Where(tf => tf.TemplateDefinition == templateDefinition); if (templatedFiltersToTakeIntoAccountFound.Any()) { templatedFiltersToTakeIntoAccount = templatedFiltersToTakeIntoAccountFound; } } ISorterDefinition[] sortersDefinition = null; if (((TemplateView)owner).SorterDefinition != null && ((TemplateView)owner).SorterDefinition.TemplateDefinition == templateDefinition) { sortersDefinition = new ISorterDefinition[] { ((TemplateView)owner).SorterDefinition } } ; ISortersAndFilters sortersAndFilters = null; if (templatedFilters != null || sortersDefinition != null) { sortersAndFilters = SortersAndFilterersFactory.CreateInstance(templateDefinition, templatedFiltersToTakeIntoAccount, sortersDefinition); } Body = BindingContextPart.CreateBodyBindingContextPart(this, TemplateDefinition.Body, dataSourceAsList, externalSortersAndFilters, sortersAndFilters); } if (TemplateDefinition.Header != null) { Header = BindingContextPart.CreateHeaderOrFooterBindingContextPart(this, TemplateDefinition.Header, BindingContextPartType.Header, DataSource); } if (TemplateDefinition.Footer != null) { Footer = BindingContextPart.CreateHeaderOrFooterBindingContextPart(this, TemplateDefinition.Footer, BindingContextPartType.Header, DataSource); } } } catch (Exception ex) { string message = $"Create the 'BindingContext' for template '{(templateDefinition == null ? string.Empty : templateDefinition.Name)}' failed . {ex.Message}"; throw new EtkException(message); } }