—Course Overview
1m 39s
Looking at the Scenario
- 8m 26s
—Introduction
1m 48s
—What You Build: The FriendOrganizer
3m 5s
—Course Outline
3m 32s
Defining the Architecture
- 10m 24s
—Introduction
0m 40s
—About N-tier and Client-server
3m 18s
—Plan the Client Layers
1m 43s
—Set up the FriendOrganizer Solution
3m 14s
—Summary
1m 28s
Building the Basic UI Layer
- 28m 9s
—Introduction
1m 24s
—Plan the User Interface Layer
2m 46s
—The MVVM-pattern
2m 0s
—Create the MainViewModel
3m 36s
—Implement INotifyPropertyChanged
3m 44s
—Set the DataContext
1m 30s
—Define the User Interface
7m 48s
—Add Autofac for Dependency Injection
4m 24s
—Summary
0m 52s
Setting up Entity Framework
- 31m 28s
—Introduction
0m 53s
—Plan the Data Access Layer
1m 46s
—Create a DbContext Subclass
5m 0s
—Add a Code First Migration
4m 50s
—Add Constraints
5m 6s
—Create and Seed the Database
4m 33s
—Build the FriendDataService
4m 37s
—Load Data Asynchronously
3m 15s
—Summary
1m 24s
Decoupling the UI Parts
- 19m 59s
—Introduction
1m 59s
—Plan the New Structure
2m 5s
—Create the LookupDataService
4m 10s
—Create the NavigationViewModel
2m 53s
—Create the NavigationView
2m 27s
—Adjust the FriendDataService
0m 54s
—Create the FriendDetailViewModel
2m 0s
—Create the FriendDetailView
2m 29s
—Summary
0m 58s
Communicating Between ViewModels
- 10m 6s
—Introduction
0m 42s
—Plan the ViewModel Communication
1m 8s
—Introduce Prism's EventAggregator
2m 21s
—Publish the OpenFriendDetaiViewEvent
2m 53s
—Subscribe to the OpenFriendDetaiViewEvent
2m 27s
—Summary
0m 33s
—Introduction
0m 58s
—The ICommand and MVVM
2m 37s
—Introduce the SaveCommand
4m 32s
—Save the Friend with Entity Framework
3m 11s
—Update the Navigation After Saving
4m 2s
—Add the NavigationItemViewModel
2m 51s
—Summary
0m 45s
Validating User Input
- 54m 37s
—Introduction
1m 26s
—Process Unhandled Exceptions
3m 49s
—Validation in WPF
3m 58s
—Wrap the Model
2m 12s
—Create the FriendWrapper
3m 17s
—Implement INotifyDataErrorInfo
4m 54s
—Add Some Validation Logic
2m 10s
—Display the Error in the Tooltip
4m 24s
—Display the Error Below the TextBox
3m 34s
—Create a NotifyDataErrorInfoBase Class
2m 51s
—Introduce a ModelWrapper Class
5m 33s
—Trigger Validation in the ModelWrapper
3m 33s
—Validate by Using Data Annotations
7m 36s
—Enable and Disable the Save Button
4m 4s
—Summary
1m 10s
Detecting Model Changes
- 49m 7s
—Introduction
1m 19s
—How Entity Framework Tracks Changes
3m 27s
—Plan the DbContext Lifetime
2m 29s
—Create the FriendRepository
5m 36s
—Use a Single FriendRepository per Detail View
7m 15s
—Add an HasChanges Method to the Repository
1m 4s
—Enable and Disable the Save Button
4m 48s
—Block Navigation from a Changed Friend
5m 3s
—Create a MessageDialogService
5m 21s
—Remove Selection in the Navigation
7m 7s
—Style the Navigation
3m 14s
—Summary
2m 18s
Adding and Deleting Entities
- 25m 35s
—Introduction
0m 58s
—Add a New Friend
8m 32s
—Trigger the Validation
2m 1s
—Delete an Existing Friend
3m 39s
—Inform the Navigation with an Event
3m 3s
—Hide and Display the FriendDetailView
5m 8s
—Display a Dialog Before Deleting
1m 34s
—Summary
0m 36s
Working with Lookups
- 18m 35s
—Introduction
1m 20s
—Create the ProgrammingLanguage-entity
4m 32s
—Extend the LookupDataService
1m 58s
—Load the Lookup in the FriendDetailViewModel
3m 51s
—Add a ComboBox to the FriendDetailView
3m 36s
—Allow Selection of an Empty Entry
2m 36s
—Summary
0m 38s
Working with Object Graphs
- 21m 18s
—Introduction
1m 17s
—Create the FriendPhoneNumber Entity
3m 39s
—Add a DataGrid to the FriendDetailView
2m 30s
—Manage Phone Numbers in the FriendDetailViewModel
6m 10s
—Display Validation Errors in the DataGrid
1m 45s
—Add a Phone Number
1m 49s
—Remove a Phone Number
3m 29s
—Summary
0m 33s
Refactoring to Support Other Detail Views
- 37m 20s
—Introduction
1m 57s
—Create the DetailViewModel Property
3m 27s
—Create the OpenDetailViewEvent
7m 34s
—Create the AfterDetailDeletedEvent
3m 57s
—Create the AfterDetailSavedEvent
2m 20s
—Fix the New Friend Creation
4m 4s
—Create a GenericRepository Class
7m 55s
—Create a DetailViewModelBase Class
4m 47s
—Summary
1m 14s
Introducing Another Detail View
- 45m 51s
—Introduction
1m 37s
—Create the Meeting Entity
5m 20s
—Create the MeetingRepository
3m 32s
—Wrap the Meeting Entity
1m 6s
—Create the MeetingDetailViewModel
4m 45s
—Create the MeetingDetailView
2m 59s
—Load Meetings in the NavigationViewModel
7m 15s
—Extend the NavigationView
4m 0s
—Instantiate the MeetingDetailViewModel
4m 0s
—Use Autofac’s IIndex Interface
3m 34s
—Add New Meetings
3m 50s
—Synchronize the Start and End Date
2m 52s
—Summary
0m 55s
Picking M:N-related Details
- 18m 12s
—Introduction
1m 6s
—Build the Picklist in the MeetingDetailView
3m 9s
—Extend the MeetingDetailViewModel
2m 32s
—Load the Friends for the Picklist
3m 58s
—Add and Remove Friends
2m 33s
—Block the Deletion of Friends
4m 12s
—Summary
0m 39s
Switching to a Tabbed UI
- 43m 59s
—Introduction
1m 30s
—Adjust the MainViewModel
7m 39s
—Add a TabControl to the MainWindow
4m 18s
—Display a Title in the Tab Header
3m 8s
—The Plan to Close a Tab
1m 29s
—Introduce the CloseDetailViewCommand
2m 9s
—Publish the AfterDetailClosedEvent
1m 14s
—Subscribe to the Event to Close the Tab
2m 12s
—Check for Changes When Closing a Tab
3m 30s
—Be Aware of Refresh Issues in a Tabbed UI
1m 25s
—Refresh the MeetingDetailView After Updating a Friend
2m 44s
—Reload a Single Friend with Entity Framework
3m 48s
—Refresh the MeetingDetailView After Deleting a Friend
1m 34s
—Open and Close Tabs for New Items
6m 13s
—Summary
0m 58s
Creating a Detail View for Collections
- 26m 38s
—Introduction
0m 58s
—Integrate the Detail View for Programming Languages
6m 37s
—Set up the ProgrammingLanguageRepository
1m 55s
—Implement the ProgrammingLanguageDetailViewModel
2m 48s
—Set up the View with a DataGrid
2m 3s
—Refresh the Programming Languages in Open Friend Tabs
2m 54s
—Add and Remove Programming Languages
4m 10s
—Catch Exceptions When Saving Referenced Languages
2m 10s
—Check if a Programming Language Is Referenced
2m 10s
—Summary
0m 49s
Implementing Optimistic Concurrency
- 31m 1s
—Introduction
2m 10s
—Two Users Saving the Same Friend
1m 58s
—Handle Concurrency Conflicts
1m 37s
—Optimistic Concurrency with Entity Framework
1m 35s
—Add a Row Version to the Friend Entity
5m 41s
—Handle the DbUpdateConcurrencyException
5m 59s
—When Another User Has Deleted an Entity
6m 9s
—Move the Exception Handling to the Base Class
4m 33s
—Summary
1m 15s
Styling the Application
- 39m 33s
—Introduction
1m 33s
—What the Final Application Should Look Like
1m 42s
—Ways to Style Your WPF Application
1m 52s
—Add Mahapps.Metro to the FriendOrganizer Application
5m 35s
—Style the Navigation and the Tab Headers
5m 29s
—Fix the Font Sizes for Buttons and ComboBoxes
3m 52s
—Adjust the Colors of Validation Errors and Controls
3m 52s
—Use the TextBox Style from Mahapps.Metro
3m 22s
—Use the Mahapps.Metro MessageDialog
7m 15s
—The Final FriendOrganizer Application
2m 57s
—Course Summary
2m 0s