Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jbe2277/waf
Win Application Framework (WAF) is a lightweight Framework that helps you to create well structured XAML Applications.
https://github.com/jbe2277/waf
android architectural-patterns csharp dotnet flaui framework ios maui mvvm uwp waf winui wpf xamarin
Last synced: 4 days ago
JSON representation
Win Application Framework (WAF) is a lightweight Framework that helps you to create well structured XAML Applications.
- Host: GitHub
- URL: https://github.com/jbe2277/waf
- Owner: jbe2277
- License: mit
- Created: 2015-08-21T18:17:11.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2025-01-06T16:19:44.000Z (15 days ago)
- Last Synced: 2025-01-10T20:00:34.516Z (11 days ago)
- Topics: android, architectural-patterns, csharp, dotnet, flaui, framework, ios, maui, mvvm, uwp, waf, winui, wpf, xamarin
- Language: C#
- Homepage:
- Size: 8.02 MB
- Stars: 718
- Watchers: 67
- Forks: 130
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Win Application Framework (WAF)
#### Successor of the WPF Application FrameworkThe Win Application Framework (WAF) is a lightweight Framework that helps you to create well-structured XAML Applications (MAUI, Xamarin, WPF, WinUI). It supports you in applying various architectural patterns:
- [Layered Architecture](https://github.com/jbe2277/waf/wiki/Layered-Architecture)
- [Model-View-ViewModel Pattern](https://github.com/jbe2277/waf/wiki/Model-View-ViewModel-Pattern)
- [DataModel-View-ViewModel Pattern](https://github.com/jbe2277/waf/wiki/DataModel-View-ViewModel-Pattern)**How to get started?**
- WAF comes with realistic real-world sample applications. Please have a look at them. See Sample Applications below.
- The [Wiki](https://github.com/jbe2277/waf/wiki) provides further guidance.## Supported Platforms
- ***.Core** *(.NET 6.0 and .NET Standard 2.0)*: Support for all .NET based applications.
- ***.Wpf** *(.NET 6.0 and .NET Framework 4.7.2)*: Extended support for Windows Presentation Foundation (WPF).## NuGet Packages
Package | Usage | Successor of
--- | --- | ---
[System.Waf.Core](https://www.nuget.org/packages/System.Waf.Core) | For all .NET based applications |
[System.Waf.Wpf](https://www.nuget.org/packages/System.Waf.Wpf) | For WPF applications | [waf](https://www.nuget.org/packages/waf)
[System.Waf.UnitTesting.Core](https://www.nuget.org/packages/System.Waf.UnitTesting.Core) | For unit testing of all .NET based applications |
[System.Waf.UnitTesting.Wpf](https://www.nuget.org/packages/System.Waf.UnitTesting.Wpf) | For unit testing of WPF applications | [waf.testing](https://www.nuget.org/packages/waf.testing)## Features
*System.Waf.Core*
- *Foundation*
- `Cache`: Provides support for [caching](https://github.com/jbe2277/waf/wiki/Cache-Pattern) a value.
- `Model`: Base class that implements [INotifyPropertyChanged](https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.inotifypropertychanged).
- `ObservableList`: Extends the `ObservableCollection` with support for `INotifyCollectionChanging` and `INotifyCollectionItemChanged`.
- `ObservableListViewCore`: [Provide change notifications for sorting and filtering.](https://github.com/jbe2277/waf/wiki/ObservableListView%3A-Provide-change-notifications-for-sorting-and-filtering)
- `SynchronizingList`: Represents a collection that synchronizes all its items with the items of the specified original collection.
- `ThrottledAction`: [Throttling](https://github.com/jbe2277/waf/wiki/Throttling-to-improve-responsiveness) of multiple method calls to improve the responsiveness of an application.
- `ValidatableModel`: Base class for a model that supports validation by implementing [INotifyDataErrorInfo](https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.inotifydataerrorinfo).
- `WeakEvent`: Supports listening to events via a weak reference. This can prevent memory leaks. See [WeakEvent](https://github.com/jbe2277/waf/wiki/Weak-Event) page for more details.
- *Applications*
- `ApplicationInfo`: Provides information about the running application.
- `(Async)DelegateCommand`: An implementation of [ICommand](https://docs.microsoft.com/en-us/dotnet/api/system.windows.input.icommand) that delegates Execute and CanExecute.
- `RecentFileList`: Most recently used (MRU) file list.
- `ViewModelCore`: [ViewModel](https://github.com/jbe2277/waf/wiki/Model-View-ViewModel-Pattern) base class with a simple approach to set the DataContext.
- *Presentation*
- `SettingsService`: Load and save user settings as a XML file.*System.Waf.Wpf*
- *Foundation*
- `DataErrorInfoSupport`: Helper class for working with the legacy [IDataErrorInfo](https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.idataerrorinfo) interface.
- *Applications*
- `ViewModel`: Extends the `ViewModelCore` class and automatically initializes the DataContext with the Dispatcher.
- *Presentation*
- `DispatcherHelper`: Implementation for DoEvents.
- `ResourceHelper`: Helper methods to manage resources in WPF.
- `ValidationHelper`: Support for data validation tracking.
- *Converters*
- `BoolToVisibilityConverter`: Converts a boolean value to and from a Visibility value.
- `InvertBooleanConverter`: Inverts a boolean value.
- `NullToVisibilityConverter`: Check for null and return the associated Visibility value.
- `StringFormatConverter`: Converts an object into a formatted string.
- `ValidationErrorsConverter`: Converts a ValidationError collection to a multi-line string error message.
- *Services*
- `FileDialogService`: Shows an open or save file dialog box.
- `MessageService`: Shows messages via the MessageBox.
*System.Waf.UnitTesting.Core*
- `AssertHelper`: Assertion helper methods for expected exceptions, [CanExecuteChanged](https://docs.microsoft.com/en-us/dotnet/api/system.windows.input.icommand.canexecutechanged) event and [PropertyChanged](https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.inotifypropertychanged) event.
- `UnitTestSynchronizationContext`: [Synchronization context](https://docs.microsoft.com/en-us/dotnet/api/system.threading.synchronizationcontext) for unit tests that simulates the behavior of a UI synchronization context.## Sample Applications
Name | Type | Description
--- | --- | ---
[Waf NewsReader](https://github.com/jbe2277/waf/tree/master/src/NewsReader) | MAUI 9
.NET 9 | A simple and fast RSS and ATOM news feed reader.
- Platforms: Android, Windows and iOS
- Architecture: [Layering](https://github.com/jbe2277/waf/wiki/Layered-Architecture), [MVVM](https://github.com/jbe2277/waf/wiki/Model-View-ViewModel-Pattern), Async patterns
- Sync feeds with multiple devices via MS Graph (OneDrive)
- OAuth authentication
- Responsive UI with Navigation pane
- Validation (Add feed view)
- Localized (English and German)
[Waf Writer](https://github.com/jbe2277/waf/tree/master/src/System.Waf/Samples/Writer) | WPF
.NET 8 | A basic word processing application.
- Architecture: [Layering](https://github.com/jbe2277/waf/wiki/Layered-Architecture), [MVVM](https://github.com/jbe2277/waf/wiki/Model-View-ViewModel-Pattern)
- Ribbon & Tabbed MDI (Multiple Document Interface)
- Animated transition between pages
- Most recently used file list (MRU)
- Message service, Open/Save dialog service
- Print preview & Print dialog
- Localized (English and German)
- UI testing with [FlaUI](https://github.com/FlaUI/FlaUI) and execution via GitHub Actions
[Waf Book Library](https://github.com/jbe2277/waf/tree/master/src/System.Waf/Samples/BookLibrary) | WPF
.NET 8 | Supports the user to manage books. Borrowed books can be tracked by this application.
- Architecture: [Layering](https://github.com/jbe2277/waf/wiki/Layered-Architecture), [Extensions](https://github.com/jbe2277/waf/wiki/Modular-Architecture#4-alternative-extensions), [MVVM](https://github.com/jbe2277/waf/wiki/Model-View-ViewModel-Pattern), [DMVVM](https://github.com/jbe2277/waf/wiki/DataModel-View-ViewModel-Pattern)
- Entity Framework with SQLite
- Validation rules
- Sort & Filter in the DataGrid
- Reporting via WPF FlowDocument & Print support
- UI testing with [FlaUI](https://github.com/FlaUI/FlaUI) and execution via GitHub Actions
[Waf Information Manager](https://github.com/jbe2277/waf/tree/master/src/System.Waf/Samples/InformationManager) | WPF
.NET 8 | A modular application that comes with a fake email client and an address book.
- Architecture: [Layering](https://github.com/jbe2277/waf/wiki/Layered-Architecture), [Modularization](https://github.com/jbe2277/waf/wiki/Modular-Architecture), [MVVM](https://github.com/jbe2277/waf/wiki/Model-View-ViewModel-Pattern)
- Office format ZIP container shared with all modules (Package API and DataContractSerializer)
- Validation rules
- Extensible navigation view & context sensitive toolbar
- Wizard dialog
- UI testing with [FlaUI](https://github.com/FlaUI/FlaUI) and execution via GitHub Actions
[Waf Music Manager](https://jbe2277.github.io/musicmanager/) | WPF
.NET 8 | Fast application that makes fun to manage the local music collection.
*MS Store (MSIX), WinRT, Media playback, File queries & properties, Async/await, Drag & Drop*
[Waf DotNetPad](https://jbe2277.github.io/dotnetpad) | WPF
.NET 9 | Code editor for programming C# and Visual Basic.
*MS Store (MSIX), .NET Compiler Platform (Roslyn), AvalonEdit, Auto completion, Async/await*
[Waf File Hash Generator](https://jbe2277.github.io/fhg/) | WinUI 3
.NET 8 | Simple tool that generates the hash values of one or more files.
*MS Store (MSIX), Async, Progress, Drag & Drop*