private BindingMetadataFlags GetFlags(BindingMetadata metadata)
        {
            BindingMetadataFlags flags = BindingMetadataFlags.None;

            if (metadata.Parent == null)
            {
                flags |= BindingMetadataFlags.Model;
            }

            if (metadata.Relation.HasFlag(RelationMetadataFlags.List))
            {
                flags |= BindingMetadataFlags.List;
            }

            if (metadata.Relation.HasFlag(RelationMetadataFlags.Item))
            {
                flags |= BindingMetadataFlags.Item;
            }

            if (metadata.Type == typeof(object) || metadata.Type == typeof(ExpandoObject))
            {
                flags |= BindingMetadataFlags.Dynamic;
            }

            if (metadata.Relation.HasFlag(RelationMetadataFlags.Readable))
            {
                flags |= BindingMetadataFlags.Readable;
            }

            if (metadata.Relation.HasFlag(RelationMetadataFlags.Writable))
            {
                flags |= BindingMetadataFlags.Writable;
            }

            return(flags);
        }
 public static bool HasFlag(this IBindingMetadata metadata, BindingMetadataFlags flag) => (metadata.Flags & flag) == flag;
 public static bool HasAnyFlag(this IBindingMetadata metadata, BindingMetadataFlags flag) => (metadata.Flags & flag) != BindingMetadataFlags.None;