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); } }
public TemplateOption(XmlTemplateOption xmlTemplateOption) { try { Name = xmlTemplateOption.Name; if (string.IsNullOrEmpty(xmlTemplateOption.Name)) { throw new ArgumentException("The template 'Name' cannot be null or empty"); } Description = xmlTemplateOption.Description; Orientation = xmlTemplateOption.Orientation; ExpanderType = xmlTemplateOption.ExpanderType; HeaderAsExpander = xmlTemplateOption.HeaderAsExpander; AddBorder = xmlTemplateOption.AddBorder; SelectionChanged = xmlTemplateOption.SelectionChanged; ContextualMenu = xmlTemplateOption.ContextMenu; if (!string.IsNullOrEmpty(xmlTemplateOption.Decorator)) { DecoratorIdent = xmlTemplateOption.Decorator; } // Retrieve the 'MainBindingDefinition' /////////////////////////////////////// //if (!string.IsNullOrEmpty(xmlTemplateOption.BindingMethod)) //{ // // Get the Data Source accessor method // ////////////////////////////////////// // string bindingMethod = xmlTemplateOption.BindingMethod.Trim(); // try // { // DataAccessorInstanceType dataAccessorInstanceType = ModelManagement.DataAccessors.DataAccessor.AccessorInstanceTypeFrom(xmlTemplateOption.InstanceType); // DataAccessor = ModelManagement.DataAccessors.DataAccessor.CreateInstance(bindingMethod, dataAccessorInstanceType, xmlTemplateOption.InstanceName); // MainBindingDefinition = BindingDefinitionRoot.CreateInstance(DataAccessor.ReturnType); // } // catch (Exception ex) // { // throw new EtkException(string.Format("Cannot resolve the DataAccessor '{0}':{1}", bindingMethod, ex.Message)); // } //} //else if (!string.IsNullOrEmpty(xmlTemplateOption.BindingWith)) { // Get the main binding type //////////////////////////// string bindingWith = xmlTemplateOption.BindingWith.Trim(); try { Type type = TypeHelpers.GetType(bindingWith); if (type == null) { throw new EtkException("Type not found"); } MainBindingDefinition = BindingDefinitionRoot.CreateInstance(type); } catch (Exception ex) { throw new EtkException($"Cannot resolve 'BindingWith' '{bindingWith}':{ex.Message}"); } } if (xmlTemplateOption.CanSort.HasValue) { if (xmlTemplateOption.CanSort.Value && MainBindingDefinition == null) { throw new EtkException("'CanSort' parameter can be set to 'true' only if the 'BindingWith' parameter is set."); } CanSort = xmlTemplateOption.CanSort.Value; } else { CanSort = MainBindingDefinition != null; } } catch (Exception ex) { throw new EtkException($"Resolve the template option failed:{ex.Message}"); } }