public static ConfigItemProperty <T> AddProperty <T, THolder>(this IConfigItemContainer c, THolder o, Expression <Func <THolder, T> > prop)
        {
            ConfigItemProperty <T> p = new ConfigItemProperty <T>(c.ConfigManager, o, ReflectionHelper.GetPropertyInfo(prop));

            c.Items.Add(p);
            return(p);
        }
        public static ConfigItemLink AddLink(this IConfigItemContainer c, ConfigPage page)
        {
            ConfigItemLink l = new ConfigItemLink(c.ConfigManager, page, null);

            c.Items.Add(l);
            return(l);
        }
        public static ConfigGroup AddGroup(this IConfigItemContainer c)
        {
            ConfigGroup g = new ConfigGroup(c.ConfigManager);

            c.Items.Add(g);
            return(g);
        }
        public static ConfigActivableSection AddActivableSection <THolder>(this IConfigItemContainer c, string displayName, string description, THolder o, Expression <Func <THolder, bool> > prop, INotifyPropertyChanged propertyMonitor)
        {
            ConfigActivableSection s = new ConfigActivableSection(c.ConfigManager, o, ReflectionHelper.GetPropertyInfo(prop), propertyMonitor);

            s.DisplayName = displayName;
            s.Description = description;
            c.Items.Add(s);
            return(s);
        }
        public static ConfigItemProperty <T> AddProperty <T, THolder>(this IConfigItemContainer c, string displayName, string description, THolder o, Expression <Func <THolder, T> > prop)
        {
            ConfigItemProperty <T> p = new ConfigItemProperty <T>(c.ConfigManager, o, ReflectionHelper.GetPropertyInfo(o, prop));

            p.DisplayName = displayName;
            p.Description = description;
            c.Items.Add(p);
            return(p);
        }
        public static ConfigItemAction AddAction(this IConfigItemContainer c, string displayName, string description, System.Action action)
        {
            ConfigItemAction a = new ConfigItemAction(c.ConfigManager, new SimpleCommand(action))
            {
                DisplayName = displayName, Description = description
            };

            c.Items.Add(a);
            return(a);
        }
        /// <summary>
        /// Adds a combobox bound to an ObservableCollection and a property showing the currently selected element from the collection
        /// </summary>
        /// <typeparam name="T">Type of one element of the collection</typeparam>
        /// <typeparam name="THolder">Type of the holder of the selected element property</typeparam>
        /// <param name="c"></param>
        /// <param name="displayName">Label of the collection</param>
        /// <param name="description">Description of the control</param>
        /// <param name="o">instance of the holder of the selected element property</param>
        /// <param name="prop">Expression that returns the selected element property</param>
        /// <param name="valueCollection">Function that returns the ObservableCollection</param>
        /// <param name="ensureCurrentNotNull">set to true if you want the collection to set the current element if it is null and there are elements in the valueCollection</param>
        /// <param name="noCurrentDisplayString">Displayed string when the current element is null</param>
        /// <returns></returns>
        public static ConfigItemCurrent <T> AddCurrentItem <T, THolder>(this IConfigItemContainer c, string displayName, string description, THolder o, Expression <Func <THolder, T> > prop, Func <THolder, object> valueCollection, bool ensureCurrentNotNull, string noCurrentDisplayString)
        {
            ConfigItemCurrent <T> a = new ConfigItemCurrent <T>(c.ConfigManager, o, ReflectionHelper.GetPropertyInfo(o, prop), () => valueCollection(o), ensureCurrentNotNull, noCurrentDisplayString)
            {
                DisplayName = displayName, Description = description
            };

            c.Items.Add(a);
            return(a);
        }
 public static ConfigItemAction AddAction(this IConfigItemContainer c, string displayName, System.Action action)
 {
     return(AddAction(c, displayName, null, action));
 }
 public static ConfigItemProperty <T> AddProperty <T, THolder>(this IConfigItemContainer c, string displayName, THolder o, Expression <Func <THolder, T> > prop)
 {
     return(AddProperty <T, THolder>(c, displayName, null, o, prop));
 }