private ComboBox CreateList(Type valueType, IRefList refList, ViewProperties[] properties, IServiceProvider serviceProvider) { ComboBox combo = new ComboBox(); combo.CausesValidation = true; combo.Sorted = false; combo.FormattingEnabled = true; combo.DropDownStyle = ComboBoxStyle.DropDownList; FormatProperties formatProperties = properties.OfType <FormatProperties>().FirstOrDefault(); string format = formatProperties.With(x => x.Format); IFormatProvider formatProvider = formatProperties.With(x => x.FormatProvider); ICustomFormatter customFormatter = formatProperties.With(x => x.CustomFormatter); combo.Format += (sender, args) => { if (!object.Equals(args.DesiredType, typeof(string))) { Log <DefaultEditorFactory> .Error("Se intenta convertir a un valor diferente de String."); args.Value = null; return; } // Se formatea. try { object item = args.ListItem; if (item is IFormattable) { args.Value = ((IFormattable)item).ToString(format, formatProvider); } else if (customFormatter != null) { args.Value = customFormatter.Format(format, item, formatProvider); } else { args.Value = item.ToString(); } } catch (Exception e) { Log <DefaultEditorFactory> .Error("Excepcion al formatear.", e); args.Value = null; } }; ControlExchange.Set(combo, TypeUtils.NewGeneric <ControlExchange>(typeof(ComboBoxExchange <>), valueType)); return(combo); }
public static IRefList <T> ChainConcat <T>(this IRefList <T> left, IRefList <T> right) { if (ChainedListExtensions.IsFixedSize(left) || ChainedListExtensions.IsFixedSize(right)) { return(new ChainedFixedSizeRefList <T>(left, right)); } else { return(new ChainedRefList <T>(left, right)); } }
public object Create(Type valueType, ViewProperties[] properties, IServiceProvider serviceProvider) { IRefList refList = properties.OfType <RefListProperties>().Select(rlp => rlp.RefList).FirstOrDefault(); if (refList != null) { return(this.CreateList(valueType, refList, properties, serviceProvider)); } Factory factory = this.dictionary.GetSafe(valueType); if (factory == null) { return(null); } return(factory(valueType, properties, serviceProvider)); }
public override void ContentChanged(ComboBox editControl, IFormModel formModel, string name, IServiceProvider serviceProvider) { IEnumerable <ViewProperties> viewProperties = formModel.GetViewProperties(name); IRefList refList = viewProperties.OfType <RefListProperties>().Select(rlp => rlp.RefList).FirstOrDefault(); if (refList != null) { IEnumerable items; if (formModel is IRefFormObject) { object formObject = ((IRefFormObject)formModel).FormObject; items = refList.GetItems(serviceProvider, formObject); } else { items = refList.GetItems(serviceProvider, null); } editControl.Items.Clear(); editControl.Items.AddRange(items.Cast <object>().ToArray()); } }
public void ChainConcat_ReadOnlyLists() { string[] leftArray = new[] { "a", "b", "c" }; List <string> leftList = new List <string>(leftArray); IBaseRefList <string> leftBaseRefList = leftArray.AsRefList(); IRefList <string> leftRefList = leftArray.AsRefList(); IRefReadOnlyList <string> leftRefReadOnlyList = leftArray.AsRefReadOnlyList(); ReadOnlyCollection <string> leftReadOnlyList = leftArray.AsReadOnly(); // or leftList.AsReadOnly() string[] rightArray = new[] { "c", "d" }; List <string> rightList = new List <string>(rightArray); IBaseRefList <string> rightBaseRefList = rightArray.AsRefList(); IRefList <string> rightRefList = rightArray.AsRefList(); IRefReadOnlyList <string> rightRefReadOnlyList = rightArray.AsRefReadOnlyList(); ReadOnlyCollection <string> rightReadOnlyList = rightArray.AsReadOnly(); // or rightList.AsReadOnly() // Note: Following is not only testing runtime behavior, but also that the static binding of the appropriate ChainConcat extension method is correct. CommonFixedSizeOrReadOnlyChainListTests(leftArray, rightRefReadOnlyList, leftArray.ChainConcat(rightRefReadOnlyList), typeof(ChainedRefReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftArray, rightReadOnlyList, leftArray.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftList, rightRefReadOnlyList, leftList.ChainConcat(rightRefReadOnlyList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftList, rightReadOnlyList, leftList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftBaseRefList, rightRefReadOnlyList, leftBaseRefList.ChainConcat(rightRefReadOnlyList), typeof(ChainedRefReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftBaseRefList, rightReadOnlyList, leftBaseRefList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefList, rightRefReadOnlyList, leftRefList.ChainConcat(rightRefReadOnlyList), typeof(ChainedRefReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefList, rightReadOnlyList, leftRefList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightArray, leftRefReadOnlyList.ChainConcat(rightArray), typeof(ChainedRefReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightList, leftRefReadOnlyList.ChainConcat(rightList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightBaseRefList, leftRefReadOnlyList.ChainConcat(rightBaseRefList), typeof(ChainedRefReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightRefList, leftRefReadOnlyList.ChainConcat(rightRefList), typeof(ChainedRefReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightRefReadOnlyList, leftRefReadOnlyList.ChainConcat(rightRefReadOnlyList), typeof(ChainedRefReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightReadOnlyList, leftRefReadOnlyList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightArray, leftReadOnlyList.ChainConcat(rightArray), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightList, leftReadOnlyList.ChainConcat(rightList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightBaseRefList, leftReadOnlyList.ChainConcat(rightBaseRefList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightRefList, leftReadOnlyList.ChainConcat(rightRefList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightRefReadOnlyList, leftReadOnlyList.ChainConcat(rightRefReadOnlyList), typeof(ChainedReadOnlyList <string>)); CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightReadOnlyList, leftReadOnlyList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>)); }
public static IRefList <T> ChainPrepend <T>(this IRefList <T> list, params T[] itemsToPrepend) => itemsToPrepend.ChainConcat(list);
public static IRefList <T> ChainAppend <T>(this IRefList <T> list, params T[] itemsToAppend) => list.ChainConcat(itemsToAppend);
public static IRefList <T> ChainConcat <T>(this T[] left, IRefList <T> right) => new ChainedFixedSizeRefList <T>(new ArrayRefList <T>(left), right);
public static IRefList <T> ChainConcat <T>(this IRefList <T> left, T[] right) => new ChainedFixedSizeRefList <T>(left, new ArrayRefList <T>(right));