/// <summary>
        /// Initializes a new instance of the <see cref="WebMethodCallResultViewModel"/> class.
        /// </summary>
        /// <param name="model">
        /// The model.
        /// </param>
        /// <param name="field">
        /// The field.
        /// </param>
        /// <param name="parentNode">
        /// The parent node.
        /// </param>
        /// <param name="popupFactory">
        /// The popup factory.
        /// </param>
        /// <param name="selectChildTypeFieldsViewModel">
        /// The select child type fields view model.
        /// </param>
        /// <param name="resultViewModelFactory">
        /// The result view model factory.
        /// </param>
        /// <param name="resultFieldFactory">
        /// The result field factory.
        /// </param>
        public WebMethodCallResultViewModel(
            IWebMethodCallResultField model,
            IWebServiceTypeFieldDescription field,
            IWebMethodCallResultViewModel parentNode,
            PopupFactory popupFactory,
            ISelectChildTypeFieldsViewModel selectChildTypeFieldsViewModel,
            IWebMethodCallResultViewModelFactory resultViewModelFactory,
            IWebMethodCallResultFieldFactory resultFieldFactory)
        {
            if (field == null)
                throw new ArgumentNullException("field");

            if (parentNode == null)
                throw new ArgumentNullException("parentNode");

            if (popupFactory == null)
                throw new ArgumentNullException("popupFactory");

            if (selectChildTypeFieldsViewModel == null)
                throw new ArgumentNullException("selectChildTypeFieldsViewModel");

            if (resultViewModelFactory == null)
                throw new ArgumentNullException("resultViewModelFactory");

            if (resultFieldFactory == null)
                throw new ArgumentNullException("resultFieldFactory");

            _model = model;
            _name = field.Name;
            _baseType = field.FieldType;
            _declaringType = field.DeclaringType;
            _parentNode = parentNode;
            PopupFactory = popupFactory;
            SelectChildTypeFieldsViewModel = selectChildTypeFieldsViewModel;
            ResultViewModelFactory = resultViewModelFactory;
            ResultFieldFactory = resultFieldFactory;
        }
        /// <summary>
        /// Deletes the specified child.
        /// </summary>
        /// <param name="node">
        /// The child node.
        /// </param>
        public void DeleteChild(IWebMethodCallResultViewModel node)
        {
            if (node == null)
                throw new ArgumentNullException("node");

            if (Model != null && node.Model != null)
                Model.Fields.Remove(node.Model);

            if (Children != null)
            {
                var index = Children.IndexOf(node);
                var updateSelectedNode = ParentSettings.SelectedOutputNode == node;

                Children.Remove(node);

                if (updateSelectedNode && index >= 0)
                {
                    index = Math.Min(index, Children.Count - 1);
                    ParentSettings.SelectedOutputNode = index >= 0 ? Children[index] : this;
                }
            }
        }
 /// <summary>
 /// Create a <see cref="IWebMethodCallResultViewModel"/>.
 /// </summary>
 /// <param name="model">
 /// The model.
 /// </param>
 /// <param name="field">
 /// The field.
 /// </param>
 /// <param name="parentNode">
 /// The parent node.
 /// </param>
 /// <returns>
 /// The <see cref="IWebMethodCallResultViewModel"/>.
 /// </returns>
 public IWebMethodCallResultViewModel CreateViewModel(
     IWebMethodCallResultField model,
     IWebServiceTypeFieldDescription field,
     IWebMethodCallResultViewModel parentNode)
 {
     return new WebMethodCallResultViewModel(model, field, parentNode, PopupFactory, SelectChildTypeFieldsViewModel, this, ResultFieldFactory);
 }