예제 #1
0
        /// <inheritdoc/>
        public override bool CanAttach(INodePresenter nodePresenter)
        {
            // We are in a dictionary...
            var dictionaryDescriptor = nodePresenter.Descriptor as DictionaryDescriptor;

            if (dictionaryDescriptor == null)
            {
                return(false);
            }

            // ... that is not read-only...
            var memberCollection = (nodePresenter as MemberNodePresenter)?.MemberAttributes.OfType <MemberCollectionAttribute>().FirstOrDefault()
                                   ?? nodePresenter.Descriptor.Attributes.OfType <MemberCollectionAttribute>().FirstOrDefault();

            if (memberCollection?.ReadOnly == true)
            {
                return(false);
            }

            // ... can construct key type...
            if (!AddNewItemCommand.CanConstruct(dictionaryDescriptor.KeyType))
            {
                return(false);
            }

            // ... and can construct value type
            var elementType = dictionaryDescriptor.ValueType;

            return(AddNewItemCommand.CanAdd(elementType));
        }
예제 #2
0
        /// <inheritdoc/>
        public override bool CanAttach(INodePresenter nodePresenter)
        {
            // We are in a collection or dictionary...
            var collectionNode       = (nodePresenter as ItemNodePresenter)?.OwnerCollection;
            var collectionDescriptor = collectionNode?.Descriptor as CollectionDescriptor;
            var dictionaryDescriptor = collectionNode?.Descriptor as DictionaryDescriptor;

            if (collectionDescriptor == null && dictionaryDescriptor == null)
            {
                return(false);
            }

            // ... that is not read-only...
            var memberCollection = (collectionNode as MemberNodePresenter)?.MemberAttributes.OfType <MemberCollectionAttribute>().FirstOrDefault()
                                   ?? collectionNode.Descriptor.Attributes.OfType <MemberCollectionAttribute>().FirstOrDefault();

            if (memberCollection?.ReadOnly == true)
            {
                return(false);
            }

            // ... and supports remove...
            if (collectionDescriptor != null)
            {
                var elementType = collectionDescriptor.ElementType;
                // We also add the same conditions that for AddNewItem
                return(collectionDescriptor.HasRemoveAt && AddNewItemCommand.CanAdd(elementType));
            }
            // TODO: add a HasRemove in the dictionary descriptor and test it!
            return(true);
        }