Awesome
Win Application Framework (WAF)
Successor of the WPF Application Framework
The 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:
How to get started?
- WAF comes with realistic real-world sample applications. Please have a look at them. See Sample Applications below.
- The 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 | For all .NET based applications | |
System.Waf.Wpf | For WPF applications | waf |
System.Waf.UnitTesting.Core | For unit testing of all .NET based applications | |
System.Waf.UnitTesting.Wpf | For unit testing of WPF applications | waf.testing |
Features
System.Waf.Core
- Foundation
Cache
: Provides support for caching a value.Model
: Base class that implements INotifyPropertyChanged.ObservableList
: Extends theObservableCollection
with support forINotifyCollectionChanging
andINotifyCollectionItemChanged
.ObservableListViewCore
: 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 of multiple method calls to improve the responsiveness of an application.ValidatableModel
: Base class for a model that supports validation by implementing INotifyDataErrorInfo.WeakEvent
: Supports listening to events via a weak reference. This can prevent memory leaks. See WeakEvent page for more details.
- Applications
- Presentation
SettingsService
: Load and save user settings as a XML file.
System.Waf.Wpf
- Foundation
DataErrorInfoSupport
: Helper class for working with the legacy IDataErrorInfo interface.
- Applications
ViewModel
: Extends theViewModelCore
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 event and PropertyChanged event.UnitTestSynchronizationContext
: Synchronization context for unit tests that simulates the behavior of a UI synchronization context.
Sample Applications
Name | Type | Description |
---|---|---|
Waf NewsReader | MAUI<br/>.NET 8 | A simple and fast RSS and ATOM news feed reader.<br/><ul><li>Platforms: Android, Windows and iOS</li><li>Architecture: Layering, MVVM, Async patterns</li><li>Sync feeds with multiple devices via MS Graph (OneDrive)</li><li>OAuth authentication</li><li>Responsive UI with Navigation pane</li><li>Validation (Add feed view)</li><li>Localized (English and German)</li></ul> |
Waf Writer | WPF<br/>.NET 8 | A basic word processing application.<br/><ul><li>Architecture: Layering, MVVM</li><li>Ribbon & Tabbed MDI (Multiple Document Interface)</li><li>Animated transition between pages</li><li>Most recently used file list (MRU)</li><li>Message service, Open/Save dialog service</li><li>Print preview & Print dialog</li><li>Localized (English and German)</li><li>UI testing with FlaUI and execution via GitHub Actions</li></ul> |
Waf Book Library | WPF<br/>.NET 8 | Supports the user to manage books. Borrowed books can be tracked by this application.<br/><ul><li>Architecture: Layering, Extensions, MVVM, DMVVM</li><li>Entity Framework with SQLite</li><li>Validation rules</li><li>Sort & Filter in the DataGrid</li><li>Reporting via WPF FlowDocument & Print support</li><li>UI testing with FlaUI and execution via GitHub Actions</li></ul> |
Waf Information Manager | WPF<br/>.NET 8 | A modular application that comes with a fake email client and an address book.<br/><ul><li>Architecture: Layering, Modularization, MVVM</li><li>Office format ZIP container shared with all modules (Package API and DataContractSerializer)</li><li>Validation rules</li><li>Extensible navigation view & context sensitive toolbar</li><li>Wizard dialog</li></ul> |
Waf Music Manager | WPF<br/>.NET 8 | Fast application that makes fun to manage the local music collection.<br/>MS Store (MSIX), WinRT, Media playback, File queries & properties, Async/await, Drag & Drop |
Waf DotNetPad | WPF<br/>.NET 8 | Code editor for programming C# and Visual Basic.<br/>MS Store (MSIX), .NET Compiler Platform (Roslyn), AvalonEdit, Auto completion, Async/await |
Waf File Hash Generator | WinUI 3<br/>.NET 8 | Simple tool that generates the hash values of one or more files.<br/>MS Store (MSIX), Async, Progress, Drag & Drop |