# waf
**Repository Path**: SmartMin2018/waf
## Basic Information
- **Project Name**: waf
- **Description**: Win Application Framework (WAF) is a lightweight Framework that helps you to create well structured XAML Applications.
- **Primary Language**: C#
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-04-26
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 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 in WPF and UWP. It supports you in applying various architectural patterns:
* [Layered Architecture](https://github.com/jbe2277/waf/wiki/Layered-Architecture)
* [Modular Architecture](https://github.com/jbe2277/waf/wiki/Modular-Architecture)
* [Model-View-ViewModel pattern](https://github.com/jbe2277/waf/wiki/Model-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.
* The fastest way to create a WAF project is by using the [WAF Visual Studio Project Template](https://marketplace.visualstudio.com/items?itemName=jbe2277.WAFProjectTemplate). Please update the WAF NuGet packages to the latest stable version after project creation.
## Version 4
Starting with version 4 the framework comes with the new name Win Application Framework instead of WPF Application Framework. This rename shows that the framework supports now various application types:
- WPF (Windows Presentation Foundation)
- UWP (Universal Windows Platform)
- Core (Basic support for all .NET based applications)
Older versions of WAF 1.0 - 3.2 can be found at CodePlex: http://waf.codeplex.com
## 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).
- `SynchronizingCollectionCore`: 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).
- *Applications*
- `(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.
*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*
- `ApplicationInfo`: Provides information about the running application.
- `SynchronizingCollection`: Same as SynchronizingCollectionCore but using [weak event](https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/weak-event-patterns) handlers.
- `ViewModel`: [ViewModel](https://github.com/jbe2277/waf/wiki/Model-View-ViewModel-Pattern) base class which sets the DataContext delayed via 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`: Null condition to 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 the WPF or Windows Forms synchronization context.
## NuGet Packages
Package | Usage | Successor of
--- | --- | ---
[System.Waf.Wpf](https://www.nuget.org/packages/System.Waf.Wpf) | For WPF applications | [waf](https://www.nuget.org/packages/waf)
[System.Waf.Uwp](https://www.nuget.org/packages/System.Waf.Uwp) | For Universal Windows Apps |
[System.Waf.Core](https://www.nuget.org/packages/System.Waf.Core) | For 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)
[System.Waf.UnitTesting.Core](https://www.nuget.org/packages/System.Waf.UnitTesting.Core) | For unit testing of all .NET based applications |
## Sample Applications
Name | Type | Description | Links
--- | --- | --- | ---
[Jbe NewsReader](https://github.com/jbe2277/waf/tree/master/src/NewsReader) | UWP | A simple and fast RSS and ATOM news feed reader.