Example #1
0
        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);
            }
        }
Example #2
0
        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}");
            }
        }