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) { }