- JSON Serialization - Auto save changes in Windows isolated storage.
- MVVM - Implemented independently, without using any 3rd party library.
- Binding - using the newer "x:bind".
- Variable Sized Wrap Grid View (for display of characters in side panel).
- Inspired by Jerry Nixon's blog post
- Back/Forward navigation
- Windows Location Service
- Adaptive Display
- Data Validations using Data Annotations
- Content dialogs
- Menu Flyouts
- Custom message dialog
- Live Tiles
- Dark/Light Themes
...and many other tricks & goodies :)
The application consists of 3 projects:
- MyAlbum - GUI Client (UWP application)
- MyAlbum.BL - Business logic layer (UWP class library)
- MyAlbum.DAL - Data access layer (UWP class library)
- Main album is displayed when the app starts and its name is displayed in bold in "Albums" menu.
- Current album is identified by a check mark in "Albums" menu.
Albums - Navigation between albums or creation of a new one
-
Main Album
-
Album X
-
Album Y
(...)
-
New Album...
Add Photos... - Open file picker to add photos to current album
Capture - Open camera app to take a picture and add it to current album
Photo
- Details - Open photo details side panel (if not already open)
- Move To... - Move selected photos to another album
- Delete - Delete selected photos
Exit
- Model<T> - An abstract base class for Album & Photo models.
- Album - Reflects an Album as it exists in storage. Contains a collection of photos.
- Photo - Reflects a Photo as it exists in storage. Contains a collection of characters
- Character - Reflects a character in photo (resembles a facebook tag, but simpler). Saved as part of its Photo container.
- ViewModelBase<T> - An abstract base class for Album & Photo ViewModels, where T is the model.
- MainViewModel - Controlls Main view
- AlbumViewModel - Represents and controlls an Album model and contains a collection of PhotoViewModels
- PhotoViewModel - Represents and controlls a Photo model and contains a collection of CharacterViewModels
- CharacterViewModel - Represents a Character model
- Main: Container for all other views. Hosts app title, menu, navigation buttons and theme button. The rest is a frame used as a placeholder for other views (currently only album).
- Album: Displays photos in a grid or flip view. Contains the photos edit side panel, which can be pinned.
%LOCALAPPDATA%\Packages\{GUID}\LocalState
- Albums
- Photos