public void PropertiesTest()
        {
            var fieldInfo = new FieldInfo();
            var rcrDisplayFieldVm = Mock.Create<IReverseCrossRefDisplayFieldViewModel>(Behavior.Loose);
            var vm = new ReverseCrossRefDisplayFieldViewModel(fieldInfo, rcrDisplayFieldVm);

            TestsHelper.TestPublicPropertiesGetSet(vm, x => vm.IsSelected);
        }
        /// <summary>
        /// Loads the subfields.
        /// </summary>
        /// <param name="onSubfieldsLoaded">The callback which notifies the caller when subfields have been loaded.</param>
        public void LoadSubFields(Action onSubfieldsLoaded)
        {
            Subfields.Clear();

            if (Model == null)
            {
                onSubfieldsLoaded();
                return;
            }

            if (Model.ColumnType == ColumnTypes.Reference || Model.ColumnType == ColumnTypes.MultiReference)
            {
                FieldList.BeginGetCrossReferenceSubfields(
                    Model.DefinedIn,
                    Model.SystemName,
                    (o, result) =>
                        {
                            //Subfields.Add(CreateIdFieldViewModel());

                            if (result.Object.IsStatesEnabled)
                            {
                                Subfields.Add(CreateCurrentStateFieldViewModel());
                            }

                            if (result.Object.IsVersioningEnabled)
                            {
                                Subfields.AddRange(CreateVersioningFieldViewModels());
                            }

                            if (result.Error == null)
                            {
                                foreach (var field in result.Object)
                                {
                                    if (!ParentStepViewModel.CanSelectField(field))
                                        continue;

                                    if (IsAggregate && !ParentStepViewModel.CanAggregateField(field))
                                        continue;

                                    var vm = new ReverseCrossRefDisplayFieldViewModel(field, this);

                                    Subfields.Add(vm);
                                }
                            }

                            onSubfieldsLoaded();
                        });

                return;
            }

            if (Model.ColumnType == ColumnTypes.ReverseReference || Model.ColumnType == ColumnTypes.ReverseMultiReference)
            {
                FieldList.BeginGetReverseCrossReferenceSubfields(
                    Model.DefinedIn,
                    Model.SystemName,
                    (o, result) =>
                        {
                            if (result.Error == null)
                            {
                                //Subfields.Add(CreateIdFieldViewModel());

                                if (result.Object.IsStatesEnabled)
                                {
                                    Subfields.Add(CreateCurrentStateFieldViewModel());
                                }

                                if (result.Object.IsVersioningEnabled)
                                {
                                    Subfields.AddRange(CreateVersioningFieldViewModels());
                                }

                                foreach (var field in result.Object)
                                {
                                    if (!ParentStepViewModel.CanSelectField(field))
                                        continue;

                                    if (IsAggregate && !ParentStepViewModel.CanAggregateField(field))
                                        continue;

                                    var vm = new ReverseCrossRefDisplayFieldViewModel(field, this);

                                    Subfields.Add(vm);
                                }
                            }

                            onSubfieldsLoaded();
                        });

                return;
            }

            onSubfieldsLoaded();
        }
        private static ReverseCrossRefDisplayFieldViewModel CreateReverseCrossRefDisplayFieldViewModel(ColumnTypes columnType = ColumnTypes.Reference)
        {
            var rcrDisplayFieldVm = Mock.Create<IReverseCrossRefDisplayFieldViewModel>(Behavior.Loose);
            Mock.Arrange(() => rcrDisplayFieldVm.ParentStepViewModel).Returns(CreateReverseCrossRefRequiredStepViewModel());

            var result = new ReverseCrossRefDisplayFieldViewModel(CreateFieldInfo(columnType), rcrDisplayFieldVm);

            return result;
        }