Plugin.Maui.DynamicForms
1.0.0
dotnet add package Plugin.Maui.DynamicForms --version 1.0.0
NuGet\Install-Package Plugin.Maui.DynamicForms -Version 1.0.0
<PackageReference Include="Plugin.Maui.DynamicForms" Version="1.0.0" />
<PackageVersion Include="Plugin.Maui.DynamicForms" Version="1.0.0" />
<PackageReference Include="Plugin.Maui.DynamicForms" />
paket add Plugin.Maui.DynamicForms --version 1.0.0
#r "nuget: Plugin.Maui.DynamicForms, 1.0.0"
#:package Plugin.Maui.DynamicForms@1.0.0
#addin nuget:?package=Plugin.Maui.DynamicForms&version=1.0.0
#tool nuget:?package=Plugin.Maui.DynamicForms&version=1.0.0
Plugin.Maui.DynamicForms
A powerful .NET MAUI library for building dynamic, metadata-driven forms at runtime - no UI code required!
Build complex, production-ready forms in minutes with full validation, theming, and cross-platform support. Perfect for admin panels, data entry apps, configuration UIs, and any scenario requiring flexible form generation.
π― Why Plugin.Maui.DynamicForms?
Stop writing repetitive UI code. Define your forms once as metadata, and let the library handle the rest - rendering, validation, data binding, and styling.
graph LR
A[Define Metadata] --> B[DynamicFormView]
B --> C[Beautiful UI]
C --> D[Validated Data]
D --> E[Your Business Logic]
style B fill:#4CAF50,stroke:#333,stroke-width:2px,color:#fff
β¨ Key Features
- π Zero UI Code - Build forms from simple metadata definitions
- π¨ 8 Built-in Themes - Professional styles ready out-of-the-box
- β Enterprise Validation - FluentValidation, DataAnnotations, or custom validators
- π Fluent API - Modern
FormBuilderfor clean, readable code - π± True Cross-Platform - Android, iOS, Windows, macOS support
- π Async-First - Built for modern async/await patterns and API integration
- π― Type-Safe - Full C# type safety with DTO binding
- π§ Fully Customizable - Every visual aspect can be styled via XAML
1. Install via NuGet
dotnet add package Plugin.Maui.DynamicForms
2. Configure MauiProgram.cs
using CommunityToolkit.Maui;
builder.UseMauiApp<App>()
.UseMauiCommunityToolkit(); // Required
3. Add Default Styles to App.xaml
<Application xmlns:styles="clr-namespace:Plugin.Maui.DynamicForms.Resources.Styles;assembly=Plugin.Maui.DynamicForms"
...>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<styles:FormStyleDefault />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
4. Use in Your Page
<ContentPage xmlns:forms="clr-namespace:Plugin.Maui.DynamicForms.Controls;assembly=Plugin.Maui.DynamicForms"
...>
<forms:DynamicFormView x:Name="MyFormView" />
</ContentPage>
// Define form structure
var fields = new FormBuilder()
.BeginBlock("Contact Information")
.AddTextField("Name").WithRequiredValidation()
.AddTextField("Email").WithRequiredValidation()
.AddTextField("Phone")
.Build();
// Assign to form
MyFormView.FormFields = fields;
// Add Validators
MyFormView.FieldValidators.Add(new RequiredFieldValidator());
// Handle save
MyFormView.FormSaved += (s, e) => {
var name = e.FormFields.First(f => f.Property == "Name").Value;
// Process form data...
};
That's it! You now have a fully functional, validated, styled form. π
π‘ Perfect For
mindmap
root((Use Cases))
Admin Panels
User Management
Settings Configuration
System Setup
Data Entry
Customer Forms
Survey Collection
Registration Forms
Dynamic Content
CMS Forms
Report Builders
Filter Interfaces
LOB Apps
Employee Records
Order Entry
Inventory Management
- Admin Panels - Quickly build configuration and management interfaces
- Data Collection Apps - Surveys, registrations, feedback forms
- Business Applications - Employee records, customer data, order entry
- Dynamic Workflows - Forms that change based on business rules
- Rapid Prototyping - Build and iterate on forms in minutes
π¨ Visual Themes
Choose from 8 professionally designed themes, or create your own:
| Theme | Style | Best For |
|---|---|---|
| Base Styling | Clean & minimal | Production apps |
| Modern Dark | Sleek dark mode | Modern UIs |
| Pastel Dream | Soft & friendly | Consumer apps |
| Ocean Blue | Professional blue | Corporate apps |
| Forest Green | Nature-inspired | Eco/outdoor apps |
| Sunset Orange | Warm & inviting | Creative apps |
| OENext | Custom branded | Enterprise |
| Test Styling | Debug-friendly | Development |
Switch themes at runtime with a single line:
Application.Current.Resources.MergedDictionaries.Add(new FormStyleModernDark());
MyForm.RefreshForm();
π Architecture Overview
graph TB
subgraph "Your App"
A[XAML Page] --> B[DynamicFormView]
C[Business Logic] --> D[DTO Models]
end
subgraph "Plugin.Maui.DynamicForms"
B --> E[FormBuilder]
E --> F[FieldMetaData]
F --> G[FormControlFactory]
G --> H[Rendered Controls]
I[Validation Engine] --> H
J[Style Engine] --> H
D <--> K[FormDataConverter]
K <--> F
end
style B fill:#4CAF50,stroke:#333,stroke-width:2px,color:#fff
style G fill:#2196F3,stroke:#333,stroke-width:2px,color:#fff
π₯ Advanced Features
FluentValidation Integration
public class PersonValidator : AbstractValidator<PersonModel>
{
public PersonValidator()
{
RuleFor(x => x.Email).EmailAddress();
RuleFor(x => x.Age).InclusiveBetween(18, 100);
}
}
MyForm.FormValidator = new FluentValidationFormValidator<PersonModel>(new PersonValidator());
Async API Data Loading
var customerData = await apiService.GetCustomerAsync(customerId);
var formFields = FormBuilder.CreateCustomerForm();
formFields = FormDataConverter.Dto2FormData(formFields, customerData);
MyForm.FormFields = formFields;
Multi-Block Forms
var form = new FormBuilder()
.BeginBlock("Personal Info", isExpanded: true)
.AddTextField("FirstName")
.AddTextField("LastName")
.NextBlock()
.BeginBlock("Contact Info", isExpanded: false)
.AddTextField("Email")
.AddTextField("Phone")
.Build();
π Documentation
| Document | Description |
|---|---|
| Library Documentation | Complete technical reference, API docs, styling guide |
| Sample Application | 9 working examples with code walkthroughs |
ποΈ Project Structure
/
βββ src/
β βββ Plugin.Maui.DynamicForms/ # π¦ Main library (NuGet package)
β βββ Controls/ # DynamicFormView control
β βββ Models/ # FieldMetaData, FieldType
β βββ Factories/ # FormBuilder, FormControlFactory
β βββ Validation/ # Validation engine & interfaces
β βββ Helpers/ # Data converters, utilities
β βββ Documentation/ # Technical docs
β
βββ Samples/
β βββ Plugin.Maui.DynamicForms.Sample/ # π± Demo application
β βββ Examples/ # 9 example forms
β βββ Resources/Styles/ # 8 theme implementations
β βββ Validation/ # FluentValidation examples
β
βββ README.md # π You are here
π§ Requirements
- .NET 10.0 or higher
- .NET MAUI 10.0+
- CommunityToolkit.Maui 12.1.0+
- Supported Platforms:
- β Android 21+
- β iOS 15+
- β macOS Catalyst 15+
- β Windows 10 (10.0.17763.0+)
π Learn by Example
The Sample Application includes 9 complete examples:
- Example Form - FluentValidation showcase
- Address Form - Multi-block with dual data binding
- Contact Form - Simple starter example
- Registration Form - Password confirmation, T&C
- Employee Form - Complex multi-section business form
- Event Registration - Radio groups, date/time pickers
- Feedback Form - Text areas, ratings
- Survey Form - Multi-topic questionnaire
- Customer Form - Async API data loading
Each example includes:
- β Full source code with comments
- β Working validation
- β DTO binding examples
- β Best practices demonstrated
π About us
We are Ralf Corinth and Torsten Weggen β lifelong software developers and innovators with a passion for building systems that last.
About Ralf
- π Studied Mechanical Engineering with a focus on Production Technology in LΓΌbeck (1978β1981).
- π» Developed early software for analyzing electric motor measurements as part of his thesis.
- π’ Led software development at Philips until 1989, experiencing the evolution from punch cards to large-scale data systems.
- π Founded his own company in 1989, introducing ERP systems and later creating O&E, an integrated CRM/ERP solution.
- π Inventor of the SML (SachMerkmalLeiste), a flexible way to document machine-specific attributes, later extended to all kinds of products and data.
- π§ Today, even in retirement, Ralf continues to innovate with .NET MAUI and the Dynamic Data Form (DDF), enabling adaptive, beautiful forms across devices.
About Torsten
- π‘ Fullstack Software developer by heart and soul, with decades of experience in enterprise systems and open-source projects.
- π’ Currently part of Hannover RΓΌck-Gruppe, with a background in building scalable solutions and contributing to the developer community.
- π Author of Auktionsbuddy 4.0, a comprehensive eBay auction management tool.
- π Recognized as a DNN MVP multiple times (2013β2018) for contributions to the DotNetNuke ecosystem.
- π Studied at Fachhochschule Wedel, with strong expertise in modern web technologies.
- π Passionate about creating software that balances performance, usability, and adaptability.
Our Collaboration
Together, we combined Ralfβs SML concept with Torstenβs technical expertise to create the Dynamic Data Form (DDF) β a system that generates responsive, elegant forms on any device. Our mission is to inspire developers with practical, performance-driven solutions that stand the test of time.
A New Chapter
As we reach the final stretch of our professional journey, weβre more motivated than ever to share what weβve learned and built. If our work has helped you or sparked new ideas, weβd be grateful for your support. A few kind sponsors could help sweeten this last chapter of our lives β and keep the spirit of innovation alive.
π Become a sponsor
π¬ If you enjoy our work, feel free to connect or support us.
π§ Questions? Reach out via email.
π€ Contributing
We love contributions! Here's how you can help:
Ways to Contribute
- π Report Bugs - Open an issue
- π‘ Suggest Features - Share your ideas
- π¨ Submit Themes - Create and share custom styles
- π Improve Docs - Help us make docs better
- π§ Submit PRs - Fix bugs or add features
Development Setup
# Clone the repository
git clone https://github.com/corweg/Plugin.Maui.DynamicForms.git
cd Plugin.Maui.DynamicForms
# Open in Visual Studio 2022
# Set Plugin.Maui.DynamicForms.Sample as startup project
# Build and run!
Pull Request Process
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
π License
This project is licensed under the MIT License - see the LICENSE.txt file for details.
Copyright Β© 2025 Torsten Weggen / Ralf Corinth
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction...
π Show Your Support
If you find this library useful, please consider:
- β Star this repository on GitHub
- π’ Share with your network
- π¦ Tweet about it - @weggetor
- π¬ Join discussions in the Issues section
π Links & Resources
| Resource | Link |
|---|---|
| NuGet Package | Plugin.Maui.DynamicForms |
| GitHub Repository | corweg/Plugin.Maui.DynamicForms |
| Report Issues | Issue Tracker |
| Sample App | Live Demo Code |
| API Documentation | Technical Docs |
π¬ Community & Support
- π§ Questions? Open an issue with the
questionlabel - π Found a bug? Open an issue with the
buglabel - π‘ Feature request? Open an issue with the
enhancementlabel
π Acknowledgments
Built with β€οΈ using:
- .NET MAUI - Microsoft's cross-platform framework
- CommunityToolkit.Maui - Essential MAUI extensions
- FluentValidation - Validation excellence
Special thanks to the .NET MAUI community for their continuous support and feedback!
<div align="center">
Built with β€οΈ for the .NET MAUI Community
Made by Torsten Weggen β’ Ralf Corinth
</div>
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0-android36.0 is compatible. net10.0-ios26.0 is compatible. net10.0-maccatalyst26.0 is compatible. net10.0-windows10.0.19041 is compatible. |
-
net10.0-android36.0
- CommunityToolkit.Maui (>= 12.1.0)
- Microsoft.Maui.Controls (>= 10.0.0)
- Microsoft.Maui.Essentials (>= 10.0.0)
-
net10.0-ios26.0
- CommunityToolkit.Maui (>= 12.1.0)
- Microsoft.Maui.Controls (>= 10.0.0)
- Microsoft.Maui.Essentials (>= 10.0.0)
-
net10.0-maccatalyst26.0
- CommunityToolkit.Maui (>= 12.1.0)
- Microsoft.Maui.Controls (>= 10.0.0)
- Microsoft.Maui.Essentials (>= 10.0.0)
-
net10.0-windows10.0.19041
- CommunityToolkit.Maui (>= 12.1.0)
- Microsoft.Maui.Controls (>= 10.0.0)
- Microsoft.Maui.Essentials (>= 10.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 324 | 11/13/2025 |
?? Initial Release
Features:
- Dynamic form generation from metadata
- 9 field types (Text, Date, Select, Bool, Time, Caption, Radiogroup, Editor, Header)
- Multi-block support with expandable sections
- Fully customizable styling via XAML styles
- Bidirectional DTO conversion
- Grid layout with multi-column support
- Validation support (required fields, error states)
- 8 pre-built styles included in demo
Requirements:
- .NET MAUI 9.0
- CommunityToolkit.Maui 12.1.0
Documentation: https://github.com/corweg/Plugin.Maui.DynamicForms