Ejemplo n.º 1
0
        public DetailsView(IDetailsViewModel detailsViewModel)
            : this()
        {
            _detailsViewModel = detailsViewModel;

            DataContext = _detailsViewModel;
        }
Ejemplo n.º 2
0
 public MainViewModel(IDetailsViewModel detailsViewModel, ISubscribersViewModel subscribersViewModel, IDetailsFormViewModel detailsFormViewModel, IEventAggregator eventAggregator)
 {
     eventAggregator.Subscribe(this);
     Items.Add(detailsViewModel);
     Items.Add(subscribersViewModel);
     Items.Add(detailsFormViewModel);
 }
        public RecruitersViewModel(
            IAsyncRequestDispatcherFactory asyncRequestDispatcherFactory,
            IDialogService dialogService,
            IAddViewModel addViewModel,
            IDetailsViewModel detailsViewModel)
        {
            _asyncRequestDispatcherFactory = asyncRequestDispatcherFactory;
            _dialogService    = dialogService;
            _addViewModel     = addViewModel;
            _detailsViewModel = detailsViewModel;
            _addRequest       = new InteractionRequest <ResponseNotification>();
            _summaryRequest   = new InteractionRequest <Notification>();

            AddCommand      = new DelegateCommand(Add);
            RemoveCommand   = new DelegateCommand <RecruiterModel>(Remove);
            MaximizeCommand = new DelegateCommand <RecruiterModel>(Maximize);
        }
        public RecruitersViewModel(
            IAsyncRequestDispatcherFactory asyncRequestDispatcherFactory,
            IDialogService dialogService,
            IAddViewModel addViewModel,
            IDetailsViewModel detailsViewModel)
        {
            _asyncRequestDispatcherFactory = asyncRequestDispatcherFactory;
            _dialogService = dialogService;
            _addViewModel = addViewModel;
            _detailsViewModel = detailsViewModel;
            _addRequest = new InteractionRequest<ResponseNotification>();
            _summaryRequest = new InteractionRequest<Notification>();

            AddCommand = new DelegateCommand(Add);
            RemoveCommand = new DelegateCommand<RecruiterModel>(Remove);
            MaximizeCommand = new DelegateCommand<RecruiterModel>(Maximize);
        }
        /// <summary>
        /// Raised when the user open the Share UI from the Charms bar
        /// </summary>
        /// <param name="sender">Programmatically initiates an exchange of content with other apps.</param>
        /// <param name="args">Share event arguments</param>
        private void ConferencesDetailsPage_DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
        {
            if (_shareContractFactory == null)
            {
                IDetailsViewModel <Conference> viewModel = (IDetailsViewModel <Conference>)DataContext;

                if (viewModel.Element != null)
                {
                    IValueConverter     converter  = new ToShareableConverter();
                    ShareableWin8Object conference = (ShareableWin8Object)converter.Convert(viewModel.Element, null, null, string.Empty);

                    _shareContractFactory = new ShareContractFactory(conference);
                }
            }

            if (_shareContractFactory != null)
            {
                _shareContractFactory.DisplayShareUI(args);
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ExecuteTriggerCommandViewModel"/> class.
        /// </summary>
        /// <param name="commandDefinition">
        /// The command definition.
        /// </param>
        /// <param name="detailsViewModel">
        /// The details view-model.
        /// </param>
        /// <param name="triggerExecuter">
        /// The trigger executer.
        /// </param>
        /// <param name="windowManager">
        /// The window manager.
        /// </param>
        /// <param name="popupFactory">
        /// The popup factory.
        /// </param>
        /// <param name="securityEvaluator">
        /// The security evaluator.
        /// </param>
        public ExecuteTriggerCommandViewModel(
            ExecuteTriggerCommandDefinition commandDefinition,
            IDetailsViewModel detailsViewModel,
            ITriggerExecuter triggerExecuter,
            IShell windowManager,
            IPopupFactory popupFactory,
            ICommandSecurityEvaluator securityEvaluator)
        {
            if (commandDefinition == null)
                throw new ArgumentNullException("commandDefinition");

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

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

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

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

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

            _triggerExecuter = triggerExecuter;
            _windowManager = windowManager;
            _popupFactory = popupFactory;
            _securityEvaluator = securityEvaluator;

            _commandDefinition = commandDefinition;
            _detailsViewModel = detailsViewModel;
            
            CreateDetailsPropertyChangedListener();
        }
        /// <summary>
        /// Initializes the view-model.
        /// </summary>
        /// <param name="commandDefinition">
        /// The command definition.
        /// </param>
        /// <param name="detailsViewModel">
        /// The details view-model.
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// The <paramref name="commandDefinition"/> parameter is null.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        /// The <paramref name="detailsViewModel"/> parameter is null.
        /// </exception>
        public void Initialize(ExecuteServiceCommandDefinition commandDefinition, IDetailsViewModel detailsViewModel)
        {
            if (commandDefinition == null)
                throw new ArgumentNullException("commandDefinition");

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

            _commandDefinition = commandDefinition;
            _detailsViewModel = detailsViewModel;
            _canExecuteRule = new HasAccessToExecuteCommandValidator(commandDefinition.SecurityConfigurations.ToArray());

            var serviceManager = DynamicTypeManager.GetIntegrationServiceCallsManager(detailsViewModel.ProcessName);

            if (serviceManager.ContainsService(_commandDefinition.ServiceGuid))
                _callDefinition = serviceManager.GetCallDefinition(_commandDefinition.ServiceGuid);

            CreateDetailsPropertyChangedListener();
        }
 /// <summary>
 /// Creates the execute trigger command view-model.
 /// </summary>
 /// <param name="commandDefinition">
 /// The command definition.
 /// </param>
 /// <param name="detailsViewModel">
 /// The details view-model.
 /// </param>
 /// <returns>
 /// The <see cref="IExecuteTriggerCommandViewModel"/>.
 /// </returns>
 public IExecuteTriggerCommandViewModel CreateViewModel(ExecuteTriggerCommandDefinition commandDefinition, IDetailsViewModel detailsViewModel)
 {
     return new ExecuteTriggerCommandViewModel(commandDefinition, detailsViewModel, TriggerExecuter, WindowManager, PopupFactory, SecurityEvaluator);
 }
Ejemplo n.º 9
0
        /// <summary>
        /// Checks if new object has been created in details view.
        /// </summary>
        /// <param name="detailsVm">Details View Model</param>
        /// <returns><c>true</c> if DetailsViewModel's Model object is new, otherwise <c>false</c>.</returns>
        /// <exception cref="System.ArgumentNullException">detailsVm</exception>
        private static bool DetailsModelIsNew(IDetailsViewModel detailsVm)
        {
            if (detailsVm == null)
            {
                throw new ArgumentNullException("detailsVm");
            }

            return detailsVm.DetailsModel != null && detailsVm.DetailsModel.Model != null && detailsVm.DetailsModel.Model.IsNew;
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Handles the IDetailsViewModel.OnProcessLoaded event.
        /// </summary>
        /// <param name="detailsVm">The DetailsViewModel which raises OnProcessLoaded event.</param>
        /// <param name="detailsView">The view for the <paramref name="detailsVm"/>.</param>
        /// <remarks>Field editors in Details View will not be created until Detail's Model will be loaded.
        /// So wait until OnProcessLoaded event occurs and after that continue with field editors.</remarks>
        private static void SubscribeDetailsProcessLoaded(IDetailsViewModel detailsVm, UserControl detailsView)
        {
            EventHandler onProcessLoaded = null;
            onProcessLoaded = (sender, args) =>
                {
                    detailsVm.OnProcessLoaded -= onProcessLoaded;
                    SubscribeDetailsLayoutUpdated(detailsView);
                };

            detailsVm.OnProcessLoaded += onProcessLoaded;            
        }
Ejemplo n.º 11
0
 public Module2Module(IRegionManager regionManager, IDetailsViewModel details)
 {
     regionManager.RegisterViewWithRegion(
         RegionNames.RightRegion,
         () => details.View);
 }
Ejemplo n.º 12
0
 private static void SetupField(PropertyInfo prop, CommonSettingsAttribute commonSettingsAttr, DocumentationAttribute docAttr, PromptAttribute promptAttr, object display, IFieldViewModel fieldViewModel, IEditableRoot model, IDetailsViewModel detailsViewModel)
 {
     fieldViewModel.Property = prop;
     fieldViewModel.Init(model, prop.GetValue(model, null), detailsViewModel);
     fieldViewModel.Label = display == null ? prop.Name : ((DisplayAttribute)display).GetName();
     fieldViewModel.WidthPercentage = (commonSettingsAttr == null || commonSettingsAttr.HideFromDetails) ? 0.4 : commonSettingsAttr.Width / 100;
     fieldViewModel.Section = (commonSettingsAttr == null || commonSettingsAttr.HideFromDetails) ? string.Empty : commonSettingsAttr.Section;
     fieldViewModel.Position = (commonSettingsAttr == null || commonSettingsAttr.HideFromDetails) ? 0 : commonSettingsAttr.Position;
     fieldViewModel.RowSpan = (commonSettingsAttr == null) ? 1 : commonSettingsAttr.RowSpan;
     fieldViewModel.Section = commonSettingsAttr == null ? string.Empty : commonSettingsAttr.Section;
     fieldViewModel.ShowDocumentation = docAttr != null;
     fieldViewModel.Documentation = docAttr == null ? null : ClrUnicodeConverter.ToText(docAttr.DocumentationBody);
     fieldViewModel.Prompt = promptAttr == null ? string.Format(CultureInfo.InvariantCulture, LanguageService.Translate("Tooltip_EnterPrompt"), fieldViewModel.Label) : promptAttr.PromptString;
     fieldViewModel.IsCalculated = prop.GetCustomAttributes(typeof(CalculatedAttribute), false).Length > 0;
     fieldViewModel.ParentDetailsVM = detailsViewModel;
 }
Ejemplo n.º 13
0
 private IFieldViewModel SetupDateTimeFieldViewModel(PropertyInfo prop, IEditableRoot model,
                                                     IDetailsViewModel detailsViewModel, DateTimeFormatAttribute dateAttr,
                                                     FieldEditorAttribute fieldEditorAttr,
                                                     CommonSettingsAttribute commonSettingsAttr,
                                                     DocumentationAttribute docAttr, PromptAttribute promptAttr,
                                                     object display)
 {
     var vm = DateTimeFieldViewModelFactory.CreateExport().Value;
     vm.InputMode = dateAttr.Value;
     vm.FieldType = GetFieldEditor(prop, fieldEditorAttr);
     SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, vm, model, detailsViewModel);
     return vm;
 }
Ejemplo n.º 14
0
        public IFieldViewModel CreateField(PropertyInfo prop, IUnitOfWork detailsModel, IEditableRoot model, IDetailsViewModel detailsViewModel, bool forBaseClass)
        {
            if (prop == null || model == null)
                return null;

            IFieldViewModel fieldViewModel = null;

            var display = prop.GetCustomAttributes(typeof(DisplayAttribute), false).Select(d => d).FirstOrDefault();

            var commonSettingsAttr =
                (CommonSettingsAttribute)prop.GetCustomAttributes(typeof(CommonSettingsAttribute), false).Select(d => d).FirstOrDefault();

            //if (commonSettingsAttr != null && commonSettingsAttr.HideFromDetails)
            //    return null;

            var crossRefAttr =
                (CrossRefFieldAttribute)prop.GetCustomAttributes(typeof(CrossRefFieldAttribute), false).Select(d => d).FirstOrDefault();
            var displayListAttr =
                (DisplayListFieldAttribute)prop.GetCustomAttributes(typeof(DisplayListFieldAttribute), false).Select(d => d).FirstOrDefault();
            var fieldEditorAttr =
                (FieldEditorAttribute)prop.GetCustomAttributes(typeof(FieldEditorAttribute), false).Select(d => d).FirstOrDefault();
            var docAttr =
                (DocumentationAttribute)prop.GetCustomAttributes(typeof(DocumentationAttribute), false).Select(d => d).FirstOrDefault();
            var promptAttr =
                (PromptAttribute)prop.GetCustomAttributes(typeof(PromptAttribute), false).Select(d => d).FirstOrDefault();
            var scheduleDateAttr =
                (ScheduleDateFieldAttribute)prop.GetCustomAttributes(typeof(ScheduleDateFieldAttribute), false).Select(d => d).FirstOrDefault();
            var reverseCrossRefAttr =
                (ReverseCrossRefFieldAttribute)prop.GetCustomAttributes(typeof(ReverseCrossRefFieldAttribute), false).Select(d => d).FirstOrDefault();
            var fileAttr =
                (FileProcessAttribute)prop.GetCustomAttributes(typeof(FileProcessAttribute), false).Select(d => d).FirstOrDefault();
            var approvalAttr =
                (ApprovalDefinitionAttribute)prop.GetCustomAttributes(typeof(ApprovalDefinitionAttribute), false).Select(d => d).FirstOrDefault();
            var aqlAttr =
                (AqlAttribute)prop.GetCustomAttributes(typeof(AqlAttribute), false).Select(d => d).FirstOrDefault();
            var numericAttr =
                (NumericAttribute)prop.GetCustomAttributes(typeof(NumericAttribute), true).Select(d => d).FirstOrDefault();
            var richAttr =
                (RichTextAttribute)prop.GetCustomAttributes(typeof(RichTextAttribute), true).Select(d => d).FirstOrDefault();
            var textAttr =
                (TextFieldAttribute)prop.GetCustomAttributes(typeof(TextFieldAttribute), true).Select(d => d).FirstOrDefault();
            var dateAttr =
                (DateTimeFormatAttribute)prop.GetCustomAttributes(typeof(DateTimeFormatAttribute), true).Select(d => d).FirstOrDefault();
            var treeViewAttr =
               (TreeViewFieldAttribute)prop.GetCustomAttributes(typeof(TreeViewFieldAttribute), false).Select(d => d).FirstOrDefault();
            var fieldBackgoundAttr =
               (FieldBackgroundAttribute)prop.GetCustomAttributes(typeof(FieldBackgroundAttribute), false).Select(d => d).FirstOrDefault();

            // CR field
            if (crossRefAttr != null)
            {
                ICrossRefFieldViewModelBase crossReffieldViewModel;

                if (crossRefAttr.AllowMultiple)
                {
                    if (crossRefAttr.EditViaSpreadsheet && !IgnoreSpreadsheetSettings)
                        crossReffieldViewModel = SpreadsheetForMCRFieldViewModelFactory.CreateExport().Value;
                    else
                        crossReffieldViewModel = MultiCrossRefFieldViewModelFactory.CreateExport().Value;
                }
                else
                {
                    var vm = SingleCrossRefFieldViewModelFactory.CreateExport().Value;

                    vm.AllowAddNew = crossRefAttr.AllowAddNew;
                    vm.AllowViewDetail = crossRefAttr.AllowViewDetail;
                    vm.AllowClear = crossRefAttr.AllowClear;

                    crossReffieldViewModel = vm;
                }

                crossReffieldViewModel.List = null;
                crossReffieldViewModel.ReferenceName = crossRefAttr.ReferenceTableName;
                crossReffieldViewModel.DisplayField = crossRefAttr.RefFieldName;
                crossReffieldViewModel.DisplayPath = crossRefAttr.DisplayFieldList;
                crossReffieldViewModel.FieldType = GetCrossRefType(crossRefAttr, aqlAttr);
                crossReffieldViewModel.ItemProcess = crossRefAttr.ReferenceTableName;
                crossReffieldViewModel.InitialValue = GetSingleCrossRefInitialValue(detailsModel, prop);

                SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, crossReffieldViewModel, model, detailsViewModel);

                crossReffieldViewModel.ItemType = crossReffieldViewModel.List != null
                                                      ? crossReffieldViewModel.List.GetType().BaseType.GetGenericArguments()[1]
                                                      : TheDynamicTypeManager.GetCrossReferenceItemType(model.ProcessName, prop.Name);

                fieldViewModel = crossReffieldViewModel;
            }

            // Display List field
            if (displayListAttr != null)
            {
                if (displayListAttr.IsSingleItemView)
                {
                    var displayListFieldViewModel = SingleItemViewDisplayListFieldViewModelFactory.CreateExport().Value;
                    displayListFieldViewModel.FieldType = "DisplayListSingleItemView";
                    SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, displayListFieldViewModel, model, detailsViewModel);
                    displayListFieldViewModel.ItemType = TheDynamicTypeManager.GetDisplayListItemType(model.ProcessName, prop.Name);
                    displayListFieldViewModel.ReferencedProcess = displayListAttr.ReferenceTableName;
                    displayListFieldViewModel.DisplayListManager = model.GetValueByPropertyName(prop.Name + "_Manager");

                    fieldViewModel = displayListFieldViewModel;
                }
                else
                {
                    var displayListfieldViewModel = (IDisplayListFieldViewModel)DisplayListFieldViewModel.CreateExport().Value;

                    displayListfieldViewModel.ItemType = displayListfieldViewModel.ItemType
                                                         ?? DynamicTypeManager.GetInfoType(displayListAttr.ReferenceTableName);
                    displayListfieldViewModel.ReferenceName = displayListAttr.ReferenceTableName;
                    displayListfieldViewModel.DisplayField = displayListAttr.RefFieldName;
                    displayListfieldViewModel.DisplayPath = displayListAttr.DisplayFieldList;
                    displayListfieldViewModel.FieldType = "DisplayList";
                    displayListfieldViewModel.ItemProcess = displayListAttr.ReferenceTableName;

                    SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, displayListfieldViewModel, model, detailsViewModel);

                    displayListfieldViewModel.ItemType = displayListfieldViewModel.ItemType
                                                         ?? DynamicTypeManager.GetInfoType(displayListAttr.ReferenceTableName);

                    fieldViewModel = displayListfieldViewModel;
                }
            }

            // Reverse CR field
            if (fieldViewModel == null && reverseCrossRefAttr != null)
            {
                var reverseCrossRefFieldViewModel = reverseCrossRefAttr.DisplayMultiple
                                                        ? (IReverseCrossRefFieldViewModelBase)MultiReverseCrossRefFieldViewModelFactory.CreateExport().Value
                                                        : SingleReverseCrossRefFieldViewModelFactory.CreateExport().Value;

                reverseCrossRefFieldViewModel.FieldType = GetReverseCrossRefType(reverseCrossRefAttr);
                reverseCrossRefFieldViewModel.ReferenceName = reverseCrossRefAttr.ReferenceTableName;
                reverseCrossRefFieldViewModel.DisplayPath = reverseCrossRefAttr.DisplayFieldList;
                reverseCrossRefFieldViewModel.AllowAddNew = reverseCrossRefAttr.AllowAddNew;
                reverseCrossRefFieldViewModel.AllowLink = reverseCrossRefAttr.AllowLink;
                reverseCrossRefFieldViewModel.CrossReferenceFieldName = reverseCrossRefAttr.CrossReferenceFieldName;

                reverseCrossRefFieldViewModel.ItemType = TheDynamicTypeManager.GetReverseCrossReferenceItemType(model.ProcessName, prop.Name);

                SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, reverseCrossRefFieldViewModel, model, detailsViewModel);

                fieldViewModel = reverseCrossRefFieldViewModel;
            }

            // ScheduleDate field
            if (fieldViewModel == null && scheduleDateAttr != null)
            {
                if (forBaseClass)
                {
                    fieldViewModel = SetupDateTimeFieldViewModel(prop, model, detailsViewModel, dateAttr, fieldEditorAttr, commonSettingsAttr, docAttr, promptAttr, display);
                    fieldViewModel.FieldType = ColumnTypes.DateTime.ToString();
                }
                else
                {
                    fieldViewModel = ScheduleDateFieldViewModelFactory.CreateExport().Value;
                    fieldViewModel.FieldType = GetFieldEditor(prop, fieldEditorAttr);
                    SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fieldViewModel, model, detailsViewModel);
                }
            }

            // file field
            if (fieldViewModel == null && fileAttr != null)
            {
                var fileVm = FileProcessViewModelFactory.CreateExport().Value;
                fileVm.TemplateData = fileAttr;

                fileVm.FieldType = GetFieldEditor(prop, fieldEditorAttr);
                SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fileVm, model, detailsViewModel);

                fieldViewModel = fileVm;
            }

            // Approval field
            if (fieldViewModel == null && approvalAttr != null)
            {
                var approvalFieldViewModel = ApprovalFieldViewModelFactory.CreateExport().Value;

                approvalFieldViewModel.FieldType = GetFieldEditor(prop, fieldEditorAttr);
                SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, approvalFieldViewModel, model, detailsViewModel);
                fieldViewModel = approvalFieldViewModel;
            }

            // Numeric field.
            if (fieldViewModel == null && numericAttr != null)
            {
                var numericFieldViewModel = NumericFieldViewModelFactory.CreateExport().Value;

                numericFieldViewModel.FieldType = GetFieldEditor(prop, fieldEditorAttr);
                numericFieldViewModel.NumericType = numericAttr.NumericType;
                numericFieldViewModel.NumberOfDigits = numericAttr.NumberOfDigits;
                SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, numericFieldViewModel, model, detailsViewModel);
                fieldViewModel = numericFieldViewModel;
            }

            if (fieldViewModel == null && fieldEditorAttr != null)
            {
                switch (fieldEditorAttr.DataType)
                {
                    case "AuditTrail":
                        fieldViewModel = AuditTrailViewModelFactory.CreateExport().Value;
                        fieldViewModel.FieldType = "AuditTrail";
                        SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fieldViewModel, model, detailsViewModel);
                        break;
                    case Constants.ChoiceFieldType:
                        fieldViewModel = ChoiceFieldViewModelFactory.CreateExport().Value;
                        fieldViewModel.FieldType = Constants.ChoiceFieldType;
                        fieldViewModel.Property = prop;
                        fieldViewModel.ReferenceName = prop.Name;
                        SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fieldViewModel, model, detailsViewModel);
                        break;
                    case Constants.ResultFieldType:
                        fieldViewModel = ResultFieldViewModelFactory.CreateExport().Value;
                        fieldViewModel.FieldType = Constants.ResultFieldType;
                        fieldViewModel.Property = prop;
                        fieldViewModel.ReferenceName = prop.Name;
                        SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fieldViewModel, model, detailsViewModel);
                        break;
                    case "Checklist":
                        var checklist = prop.GetValue(model, null);
                        var displayFieldAttributes = (ChecklistDisplayFieldAttribute[])prop.GetCustomAttributes(typeof(ChecklistDisplayFieldAttribute), false);

                        if (checklist != null && ((ChecklistEdit)checklist).IsSingleQuestionView)
                        {
                            var checklistFieldViewModel = ChecklistFieldSingleViewModelFactory.CreateExport().Value;

                            foreach (var displayFieldAttribute in displayFieldAttributes)
                            {
                                checklistFieldViewModel.AnswerDisplayFields.Add(
                                    new FieldSettingsOverride
                                        {
                                            FieldName = displayFieldAttribute.SystemName,
                                            Position = displayFieldAttribute.Sequence,
                                            Width = displayFieldAttribute.Width,
                                            RowSpan = displayFieldAttribute.NumberOfRows
                                        });
                            }

                            fieldViewModel = checklistFieldViewModel;
                            checklistFieldViewModel.FieldType = "ChecklistSingleQuestionView";
                        }
                        else
                        {
                            var checklistFieldViewModel = ChecklistFieldGridViewModelFactory.CreateExport().Value;

                            foreach (var displayFieldAttribute in displayFieldAttributes)
                            {
                                checklistFieldViewModel.AnswerDisplayFields.Add(
                                    new FieldSettingsOverride
                                        {
                                            FieldName = displayFieldAttribute.SystemName,
                                            Position = displayFieldAttribute.Sequence,
                                            Width = displayFieldAttribute.Width,
                                            RowSpan = displayFieldAttribute.NumberOfRows
                                        });
                            }

                            var attr = prop.GetCustomAttribute<ChecklistShowLinkedItemsAttribute>();

                            if (attr != null)
                            {
                                checklistFieldViewModel.ShowLinkedItems = attr.ShowLinkedItems;
                            }

                            fieldViewModel = checklistFieldViewModel;
                            fieldViewModel.FieldType = "ChecklistGridView";
                        }

                        fieldViewModel.Property = prop;
                        fieldViewModel.ReferenceName = prop.Name;
                        SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fieldViewModel, model, detailsViewModel);
                        break;
                    case Constants.SampleFieldType:
                        fieldViewModel = SampleFieldViewModelFactory.CreateExport().Value;
                        fieldViewModel.FieldType = Constants.SampleFieldType;
                        fieldViewModel.Property = prop;
                        fieldViewModel.ReferenceName = prop.Name;
                        SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fieldViewModel, model, detailsViewModel);
                        break;
                    case "Image":
                        fieldViewModel = ImageFieldViewModelFactory.CreateExport().Value;
                        fieldViewModel.FieldType = "Image";
                        fieldViewModel.Property = prop;
                        fieldViewModel.ReferenceName = prop.Name;
                        SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fieldViewModel, model, detailsViewModel);
                        break;
                    case "Frequency":
                        fieldViewModel = FrequencyFieldViewModel.CreateExport().Value;
                        fieldViewModel.FieldType = "Frequency";
                        fieldViewModel.Property = prop;
                        fieldViewModel.ReferenceName = prop.Name;
                        SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fieldViewModel, model, detailsViewModel);
                        break;
                    case "SpcChart":
                        fieldViewModel = SpcChartControllerVMFactory.CreateExport().Value;
                        fieldViewModel.FieldType = "SpcChart";
                        fieldViewModel.Property = prop;
                        fieldViewModel.ReferenceName = prop.Name;
                        SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fieldViewModel, model, detailsViewModel);
                        break;
                    case "SampleType":
                        fieldViewModel = SampleTypeFieldViewModelFactory.CreateExport().Value;
                        fieldViewModel.FieldType = "SampleType";
                        fieldViewModel.Property = prop;
                        fieldViewModel.ReferenceName = prop.Name;
                        SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fieldViewModel, model, detailsViewModel);
                        break;
                    case "SamplingTechnique":
                        fieldViewModel = SamplingTechniqueFieldViewModelFactory.CreateExport().Value;
                        fieldViewModel.FieldType = "SamplingTechnique";
                        fieldViewModel.Property = prop;
                        fieldViewModel.ReferenceName = prop.Name;
                        SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fieldViewModel, model, detailsViewModel);
                        break;
                    case "Label":
                        fieldViewModel = LabelFieldViewModelFactory.CreateExport().Value;

                        var labelAttr = (LabelFieldAttribute)(from d in prop.GetCustomAttributes(typeof(LabelFieldAttribute), false) select d).FirstOrDefault();
                        if (labelAttr != null) fieldViewModel.IsHeaderHidden = labelAttr.IsHeaderHidden;

                        fieldViewModel.FieldType = "Label";
                        fieldViewModel.Property = prop;
                        fieldViewModel.ReferenceName = prop.Name;
                        SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fieldViewModel, model, detailsViewModel);
                        break;
                    case "GageRR":
                        fieldViewModel = GageRRFieldViewModelFactory.CreateExport().Value;
                        fieldViewModel.FieldType = "GageRR";
                        fieldViewModel.Property = prop;
                        fieldViewModel.ReferenceName = prop.Name;
                        SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fieldViewModel, model, detailsViewModel);
                        break;
                }
            }

            // rich text box field
            if (fieldViewModel == null && richAttr != null)
            {
                var richVm = RichTextFieldViewModelFactory.CreateExport().Value;
                richVm.NumberOfCharacters = textAttr.NumberOfCharacters;
                richVm.FieldType = GetFieldEditor(prop, fieldEditorAttr);
                SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, richVm, model, detailsViewModel);

                fieldViewModel = richVm;
            }

            // text field
            if (fieldViewModel == null && textAttr != null)
            {
                var textVm = TextFieldViewModelFactory.CreateExport().Value;
                textVm.NumberOfRows = textAttr.NumberOfRows;
                textVm.Mask = textAttr.Mask;
                textVm.MaskType = textAttr.MaskType;
                textVm.MaxLength = textAttr.NumberOfCharacters;
                textVm.FieldType = GetFieldEditor(prop, fieldEditorAttr);

                SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, textVm, model, detailsViewModel);
                fieldViewModel = textVm;
            }

            // date time field
            if (fieldViewModel == null && dateAttr != null)
            {
                fieldViewModel = SetupDateTimeFieldViewModel(prop, model, detailsViewModel, dateAttr, fieldEditorAttr, commonSettingsAttr, docAttr, promptAttr, display);
            }
            //TreeView
            if (fieldViewModel == null && treeViewAttr != null)
            {
                var treeViewFieldViewModel = TreeViewFieldViewModelFactory.CreateExport().Value;
                treeViewFieldViewModel.FieldType = "TreeView";
                treeViewFieldViewModel.ReferenceName = treeViewAttr.ReferenceTableName;
                treeViewFieldViewModel.ItemType = TheDynamicTypeManager.GetReverseCrossReferenceItemType(model.ProcessName, prop.Name);
                SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, treeViewFieldViewModel, model, detailsViewModel);
                fieldViewModel = treeViewFieldViewModel;
            }
            
            // any other field
            if (fieldViewModel == null)
            {
                fieldViewModel = FieldViewModelFactory.CreateExport().Value;
                fieldViewModel.FieldType = GetFieldEditor(prop, fieldEditorAttr);
                SetupField(prop, commonSettingsAttr, docAttr, promptAttr, display, fieldViewModel, model, detailsViewModel);
            }

            foreach (var nameValueAttribute in prop.GetCustomAttributes(typeof(NameValueAttribute), true).Cast<NameValueAttribute>())
                fieldViewModel.AddProperty(GetAttributeName(nameValueAttribute), nameValueAttribute.Value.GetType(), true);

            foreach (var nameValueAttribute in prop.GetCustomAttributes(typeof(NameValueAttribute), true).Cast<NameValueAttribute>())
                fieldViewModel.SetPropertyValue(GetAttributeName(nameValueAttribute), nameValueAttribute.Value);

            if (fieldBackgoundAttr != null)
                fieldViewModel.BackcolorFieldName = fieldBackgoundAttr.BackcolorFieldName;

            return fieldViewModel;
        }