/// <summary>
     /// Move Display Field Down.
     /// </summary>
        /// <param name="field">Selected field.</param>
     /// /param&gt;
        public void MoveDisplayFieldDown(SelectedFieldViewModel field)
        {
            var orderedFields = SelectedDisplayFields.OrderBy(f => f.Order).ToArray();
            var index = Array.IndexOf(orderedFields, field);

            if (index < 0)
                return;

            if (index < orderedFields.Length - 1)
            {
                if (index < orderedFields.Length - 2)
                    field.Model.Order = (orderedFields[index + 1].Order + orderedFields[index + 2].Order) / 2.0;
                else
                    field.Model.Order = orderedFields[index + 1].Order + 1.0;
            }

            UpdateCanMoveFields();

            OrderedSelectedFields.View.Refresh();
        }
        /// <summary>
        /// Select A field from the field list.
        /// </summary>
        /// <param name="field">Selected field.</param>
        public void UnselectDisplayField( SelectedFieldViewModel field)
        {
            string newstr= string.Empty;
            ParentModel.Model.HeaderDisplayFields = string.Empty;
            if (!string.IsNullOrEmpty(SelectedFields))
                foreach (var str in SelectedFields.Split(','))
                {
                    if (str != field.FullPath && !string.IsNullOrEmpty(str))
                    {
                        newstr += str + ",";

                        var lfieldViewModel = SelectedDisplayFields.FirstOrDefault(f => f.FullPath == str);

                        if (string.IsNullOrEmpty(ParentModel.Model.HeaderDisplayFields))
                        {
                            if (lfieldViewModel != null)
                            {
                                this.ParentModel.Model.HeaderDisplayFields = lfieldViewModel.DisplayName;
                            }
                        }
                        else if (lfieldViewModel != null)
                        {
                            this.ParentModel.Model.HeaderDisplayFields += ", " + lfieldViewModel.DisplayName;
                        }
                    }
                }
            SelectedFields = newstr;

            UpdateCanMoveFields();

            var vm = FindNode(field.FullPath);

            if (vm != null)
                vm.IsSelected = false;
        }
        /// <summary>
        /// Move Display Field Up.
        /// </summary>
        /// <param name="field">Selected field.</param>
        public void MoveDisplayFieldUp(SelectedFieldViewModel field)
        {
            var orderedFields = SelectedDisplayFields.OrderBy(f => f.Order).ToArray();
            var index = Array.IndexOf(orderedFields, field);

            if (index <= 0)
                return;

            var order = orderedFields[index - 1].Order;

            if (index - 2 >= 0)
                order += orderedFields[index - 2].Order;

            field.Model.Order = order / 2.0;

            UpdateCanMoveFields();

            OrderedSelectedFields.View.Refresh();
        }
        /// <summary>
        /// Select A field from the field list.
        /// </summary>
        /// <param name="fieldViewModel">Selected field.</param>
        public void SelectDisplayField(ISelectorFieldViewModel fieldViewModel)
        {
            var path = fieldViewModel.SystemName;

            if (SelectedFields.Contains(path + ","))
            {
                return;
            }

            var maxOrder = 0.0;

            if (!string.IsNullOrEmpty(SelectedFields))
                maxOrder = SelectedFields.Split(',').Length;

            SelectedFields += path + ",";
            if (string.IsNullOrEmpty(ParentModel.Model.HeaderDisplayFields))
                ParentModel.Model.HeaderDisplayFields = fieldViewModel.Name;
            else
                ParentModel.Model.HeaderDisplayFields += ", " + fieldViewModel.Name;

            var field = new CrossRefFieldEdit();
            field.FieldName = fieldViewModel.Name;
            field.FullPath = fieldViewModel.SystemName;
            field.Order = maxOrder + 1.0;
            field.FieldGuid = fieldViewModel.Model.Guid;

            var vm = new SelectedFieldViewModel();

            vm.Initialize(field, this);
            SelectedDisplayFields.Add(vm);

            UpdateCanMoveFields();
        }