Esempio n. 1
0
        private static Bindings.MemberBinding[] _CreateBindings(SDK.ContentObject source, Func <TypeInfo, IEnumerable <MemberInfo> > func, IPropertyProvider properties)
        {
            var members = func(source.GetType().GetTypeInfo());

            var bindings = new List <Bindings.MemberBinding>();

            foreach (var minfo in members)
            {
                var attrib = minfo.GetInputDescAttribute();
                if (attrib == null)
                {
                    continue;
                }

                var desc = new Bindings.MemberBinding.Description()
                {
                    Member     = minfo,
                    Properties = properties,
                    Target     = source
                };

                var binding = _CreateBinding(attrib, desc);
                if (binding == null)
                {
                    continue;
                }

                bindings.Add(binding);
            }

            if (true) // we interconnect all the VALUE bindings , so when a value of a binding is changed, all of them raise a NotifyPropertyChanged, so they can, more or less, work as a basic state machine
            {
                var valueBindings = bindings.OfType <Bindings.ValueBinding>().ToArray();

                foreach (var vb in valueBindings)
                {
                    vb._AllValueBindings = valueBindings;
                }
            }

            return(bindings.ToArray());
        }
Esempio n. 2
0
        private static Bindings.MemberBinding _CreateBinding(SDK.InputPropertyAttribute attribute, Bindings.MemberBinding.Description bindDesc)
        {
            if (attribute is SDK.InputNodeAttribute nodeAttribute)
            {
                return(Bindings.DependencyBinding.Create(bindDesc, nodeAttribute.IsCollection));
            }

            if (attribute is SDK.InputValueAttribute)
            {
                return(Bindings.ValueBinding.Create(bindDesc));
            }

            return(new Bindings.InvalidBinding(bindDesc));
        }