protected override IComponentAdapter CreateComponentAdapter()
        {
            var componentModel = new DxTagBoxModel <DataItem <object>, object>();
            var dataSourcePropertyAttribute            = MemberInfo.FindAttribute <DataSourcePropertyAttribute>();
            IEnumerable <DataItem <object> > dataItems = new DataItem <object> [0];

            if (dataSourcePropertyAttribute != null)
            {
                var datasource = ((IEnumerable)MemberInfo.Owner
                                  .FindMember(dataSourcePropertyAttribute.DataSourceProperty).GetValue(CurrentObject)).Cast <object>();
                dataItems = datasource.Select(o => new DataItem <object>(o, $"{o}"));
                if (datasource is DynamicCollection dynamicCollection)
                {
                    dynamicCollection.WhenObjects()
                    // .TakeUntil(o => !IsDisposed)
                    // .Select(o => new DataItem<object>(o, $"{o}")).ToEnumerable();
                    .Do(o => componentModel.Data = componentModel.Data.Concat(new List <DataItem <object> >()
                    {
                        new(o, $"{o}")
                    }.ToArray()), () => {})
        /// <summary>
        /// Creates the component adapter.
        /// </summary>
        /// <returns>IComponentAdapter.</returns>
        protected override IComponentAdapter CreateComponentAdapter()
        {
            var componentModel = new DxTagBoxModel <DataItem <object>, object>();
            var data           = new List <DataItem <object> >();

            componentModel.Data           = data;
            componentModel.ValueFieldName = nameof(DataItem <object> .Value);
            componentModel.TextFieldName  = nameof(DataItem <object> .Text);

            foreach (var item in (Model.PredefinedValues ?? string.Empty).Split(";").Where(val => !string.IsNullOrEmpty(val)).Select(val => val.Trim()).Distinct())
            {
                data.Add(new DataItem <object>(item, item));
            }

            var currentObjectVal = this.GetPropertyValue(CurrentObject);

            if (currentObjectVal is string currentObjectValStr)
            {
                foreach (var item in currentObjectValStr.Split(";").Where(val => !string.IsNullOrEmpty(val)).Select(val => val.Trim()).Distinct())
                {
                    if (!data.Any(m => m.Text == item))
                    {
                        data.Add(new DataItem <object>(item, item));
                    }
                }
            }

            if (Model is IXenialTokenStringModelPropertyEditor model)
            {
                componentModel.FilteringMode = model.XenialTokenStringPopupFilterMode switch
                {
                    TokenPopupFilterMode.StartsWith => DataGridFilteringMode.StartsWith,
                    TokenPopupFilterMode.Contains => DataGridFilteringMode.Contains,
                    _ => componentModel.FilteringMode
                };

                componentModel.AllowCustomTags = model.XenialTokenStringAllowUserDefinedTokens switch
                {
                    true => true,
                    false => false,
                    _ => componentModel.AllowCustomTags
                };

                if (componentModel.AllowCustomTags)
                {
                    componentModel.TagsChanged = EventCallback.Factory.Create <IEnumerable <string> >(this, arg =>
                    {
                        if (CurrentObject is not null)
                        {
                            if (arg is null)
                            {
                                MemberInfo.SetValue(CurrentObject, null);
                            }
                            else
                            {
                                MemberInfo.SetValue(CurrentObject, string.Join(";", arg.Where(v => !string.IsNullOrEmpty(v)).Distinct()));
                            }
                        }
                    });
                }
            }

            return(new XenialStringToStringAdapter(componentModel));
        }
 public XenialStringToStringAdapter(DxTagBoxModel <DataItem <object>, object> componentModel) : base(componentModel)
 {
 }