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; }
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; }