public ViewModelMetadata Convert()
        {
            _viewModelMetadata = new ViewModelMetadata()
            {
                PropertyName = _modelMetadata.PropertyName, //ToCamelCase(_modelMetadata.PropertyName),
                DisplayName = _modelMetadata.DisplayName ?? _modelMetadata.PropertyName,
                DataType = _modelMetadata.DataTypeName != null ? _modelMetadata.DataTypeName : (Nullable.GetUnderlyingType(_modelMetadata.ModelType) != null ? Nullable.GetUnderlyingType(_modelMetadata.ModelType).Name : _modelMetadata.ModelType.Name),
                IsRequired = _modelMetadata.IsRequired,
                IsComplexType = _modelMetadata.IsComplexType
            };

            foreach (var key in _modelMetadata.AdditionalValues.Keys)
            {
                _viewModelMetadata.AdditionalMetadata.Add(key, _modelMetadata.AdditionalValues[key]);
            }

            this.AddValidators();

            if (_modelMetadata.IsComplexType)
            {
                if (_modelMetadata.ModelType.IsGenericType && typeof(IEnumerable).IsAssignableFrom(_modelMetadata.ModelType))
                {
                    _viewModelMetadata.IsListType = true;

                    var gtrd = _modelMetadata.ModelType.GetGenericTypeDefinition();
                    Type typeInEnumerable = _modelMetadata.ModelType.GetGenericArguments()[0];

                    _viewModelMetadata.ListTypeViewModelMetadata = ViewModelMetadata.GetMetadataForType(typeInEnumerable, _controllerContext);
                }
                else
                {
                    foreach (ModelMetadata propertyModelMetadata in _modelMetadata.Properties)
                    {
                        ModelMetadataConverter converter = new ModelMetadataConverter(propertyModelMetadata, _controllerContext);
                        _viewModelMetadata.Properties.Add(converter.Convert());
                    }
                }
            }

            return _viewModelMetadata;
        }
Пример #2
0
        private static async Task <NavigationResult?> PerformValidation(
            Type pageType,
            INavigationService navigationService,
            INavigationParameters?parameters)
        {
            if (Validator == null)
            {
                return(null);
            }

            var pageInfo      = new ViewModelMetadata(pageType);
            var shouldProceed = await Validator.Invoke(navigationService, parameters, pageInfo);

            if (shouldProceed)
            {
                return(null);
            }

            return(new NavigationResult
            {
                Success = false,
                Exception = new NavigationValidationException(pageInfo)
            });
        }
 public NavigationValidationException(ViewModelMetadata pageInfo, string?message = null) : base(message)
 {
     PageInfo = pageInfo;
 }