SlideShare a Scribd company logo
Tool Development
Chapter 10: MVVM, Tool Chains
Nick Prühs
Assignment Solution #9
DEMO
2 / 58
Objectives
• To understand the implications of the MVVM
pattern
• To get an overview of approaches for tool chains
3 / 58
Model-View-Controller
• Architectural pattern that separates data from its
visual representation
• Model: Data, such as names, phone numbers, or health
points.
• View: Visual representation of that data, such as console
output, UI textfields or health bars.
• Controller: Layer that separates model from view,
serving as interface for any interaction with the data.
4 / 58
Model-View-Controller
5 / 58
Model-View-Controller
• Allows exchanging views or modifying the model
without breaking existing functionality.
• For instance, write console client first and GUI client
after.
• Greatly improves your application architecture
through separation of concerns.
• Anybody always knows where to look in your code.
6 / 58
Model-View-View Model
• Architectural pattern that separates data from its
visual representation
• Model: Data, such as names, phone numbers, or health
points.
• View: Visual representation of that data, such as console
output, UI textfields or health bars.
• View Model: Responsible for exposing data from the
model in such a way that those objects are easily
managed and consumed
7 / 58
Model-View-View Model
8 / 58
Model-View-View Model
• Attempts to gain both the advantages of separation
of functional development provided by MVC as well
as leveraging the advantages of data bindings
• binds data as close to the pure application model as
possible
• uses inherent data checking features to validate any
incoming data
9 / 58
Where Is The Controller?
• Substituted by bindings
• Synchronize the view model and view
• Key enablers of the pattern
• Controller sometimes included anyway
• Ongoing area of discussion regarding the standardization
of the MVVM pattern
10 / 58
Drawbacks of MVVM
• Overkill for simple UI operations
• Can result in considerable memory consumption in
very large applications
• Where to put event handlers for e.g. button clicks?
11 / 58
Data Conversion
• Sometimes, you might be willing to bind a property
to a value of a different type (e.g. Color to Brush)
• WPF allows to you implement the IValueConverter
interface for
• changing data from one type to another
• translating data based on cultural information
• modifying other aspects of the presentation
12 / 58
Data Conversion
XAML
13 / 58
<Window x:Class="DataConversionExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DataConversionExample"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:NotConverter x:Key="NotConverter"/>
</Window.Resources>
<CheckBox
Content="Prohibited"
IsChecked="{Binding Allowed, Converter={StaticResource NotConverter}}">
</CheckBox>
</Window>
Data Conversion
C#
14 / 58
class NotConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool boolValue;
if (value == null || !bool.TryParse(value.ToString(), out boolValue)) return null;
return !boolValue;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return new NotImplementedException();
}
}
Data Validation
• Most of the time, you need to validate that the
user has entered the expected information in the
correct format.
• Validation checks can be based on type, range,
format, or other application-specific requirements.
• WPF data binding allows you to associate
ValidationRules with your bindings.
15 / 58
Data Validation
XAML
16 / 58
<Application x:Class="DataValidationExample.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DataValidationExample"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ControlTemplate x:Key="ErrorLabel">
<StackPanel>
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder Name="MyAdorner" />
</Border>
<TextBlock
Foreground="Red"
FontSize="8pt"
Text="{Binding ElementName=MyAdorner,
Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" />
</StackPanel>
</ControlTemplate>
</Application.Resources>
</Application>
Data Validation
XAML
17 / 58
<Window x:Class="DataValidationExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DataValidationExample"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<TextBox Validation.ErrorTemplate="{StaticResource ErrorLabel}">
<TextBox.Text>
<Binding Path="Name">
<Binding.ValidationRules>
<local:StringNotEmptyValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</Window>
Data Validation
C#
18 / 58
public class StringNotEmptyValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
var s = value as string;
if (s == null || string.IsNullOrEmpty(s))
{
return new ValidationResult(false, "Must not be empty.");
}
return ValidationResult.ValidResult;
}
}
Data Bind for Unity
DEMO
19 / 58
Cancelling Events
• Many of the events in WPF can be cancelled by
your code to implement special event handling.
• These events usually are provided twice by WPF,
one for the actual event, and one for signaling that
the event is about to occur
• OnClosing
• OnClosed
20 / 58
Cancelling Events
WPF
21 / 58
<Window x:Class="CancelEventExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CancelEventExample"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525" Closing="MainWindow_OnClosing">
Cancelling Events
C#
22 / 58
private void MainWindow_OnClosing(object sender, CancelEventArgs e)
{
var result = MessageBox.Show(
"Do you want to save your progress before exiting?",
"Unsaved Data",
MessageBoxButton.YesNo,
MessageBoxImage.Question,
MessageBoxResult.Yes);
if (result == MessageBoxResult.Yes)
{
e.Cancel = true;
// Show save file dialog.
}
}
Tool Chains
• Output of one tool is used as input for another
• Photoshop -> Sprite Packer, Texture Compression
• Build Server -> Git, MSbuild, Unity, NUnit
• Visual Studio -> Post-build events
• Excel -> VBA
• Localization
• Unity Editor Scripts
23 / 58
Tool Chains
DEMO
24 / 58
Tool Chains
• Technical Requirements
• Command-line parameters
• Non-blocking operation (i.e. must not require user input
for proceeding)
• Robust error (code) handling
• User Requirements
• Good understanding of file systems and working
directories
• Sometimes: Access to system environment variables
• Sometimes: Understanding of different OS
25 / 58
WPF Designer
DEMO
26 / 58
Review Session
27 / 58
What You Have Learned
 Basic development process of good Desktop apps
 Importance of good UI and UX design
 Developing basic Desktop applications with WPF
 How to approach common I/O tasks in .NET
 Best practices of file and stream I/O in general
 Advanced XML concepts such as XPath and XSLT
 Overview of other common text-based file formats
28 / 58
What You Have Learned
 How to use reflections to your advantage
 How to create reactive UIs with worker threads
 How to implement an undo/redo stack
 How to interact with the Windows shell
 How to globalize and localize WPF applications
 How to properly set up automatic tests
How to work in teams using GitFlow
29 / 58
And now…
Go out and make
some tools!
30 / 58
References
• Wikipedia. Model View ViewModel.
http://en.wikipedia.org/wiki/Model_View_ViewMo
del, June 23, 2014.
• MSDN. Data Binding Overview.
https://msdn.microsoft.com/en-
us/library/ms752347(v=vs.110).aspx, May 2016.
• MSDN. IValueConverter interface.
https://msdn.microsoft.com/en-
us/library/system.windows.data.ivalueconverter(v=
vs.110).aspx, May 2016.
31 / 58
Thank you!
http://www.npruehs.de
https://github.com/npruehs
@npruehs
dev@npruehs.de
Thank you for your attention!
Contact
Mail
dev@npruehs.de
Blog
http://www.npruehs.de
Twitter
@npruehs
Github
https://github.com/npruehs
33 / 58

More Related Content

PPTX
Design pattern
PDF
Ui design patterns
PDF
Tool Development 02 - Advanced WPF Controls
PDF
Tool Development 01 - Introduction to Tool Development
PPT
Introduction to j2 ee patterns online training class
PPTX
Acrhitecture deisign pattern_MVC_MVP_MVVM
PPTX
Architectural Design & Patterns
PDF
Shaders in Unity by Zoel
Design pattern
Ui design patterns
Tool Development 02 - Advanced WPF Controls
Tool Development 01 - Introduction to Tool Development
Introduction to j2 ee patterns online training class
Acrhitecture deisign pattern_MVC_MVP_MVVM
Architectural Design & Patterns
Shaders in Unity by Zoel

Viewers also liked (14)

PPTX
Shader Programming With Unity
PPTX
Unity cookbook 6
PDF
Game Programming 10 - Localization
PDF
Game Programming 09 - AI
PDF
Game Programming 12 - Shaders
PPSX
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
PDF
Shaders - Claudia Doppioslash - Unity With the Best
PDF
Game Programming 13 - Debugging & Performance Optimization
PDF
Designing an actor model game architecture with Pony
PPT
Introduction To Geometry Shaders
PPSX
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
PDF
Eight Rules for Making Your First Great Game
PPTX
Cg shaders with Unity3D
PDF
Unite2014: Mastering Physically Based Shading in Unity 5
Shader Programming With Unity
Unity cookbook 6
Game Programming 10 - Localization
Game Programming 09 - AI
Game Programming 12 - Shaders
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Shaders - Claudia Doppioslash - Unity With the Best
Game Programming 13 - Debugging & Performance Optimization
Designing an actor model game architecture with Pony
Introduction To Geometry Shaders
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Eight Rules for Making Your First Great Game
Cg shaders with Unity3D
Unite2014: Mastering Physically Based Shading in Unity 5
Ad

Similar to Tool Development 10 - MVVM, Tool Chains (20)

PPTX
Adopting MVVM
PPTX
WPF - Controls &amp; Data
PPTX
The Magic of WPF & MVVM
PPTX
Mvvm in the real world tccc10
PPTX
Introduction to XAML and its features
PPTX
WPF with MVVM: From the Trenches
PPTX
Advanced MVVM in Windows 8
PPTX
Xaml programming
PDF
Introduction To MVVM
PPTX
Presentation Model
PPTX
Applied MVVM in Windows 8 apps: not your typical MVVM session!
PPTX
WPF For Beginners - Learn in 3 days
PPTX
Building an enterprise app in silverlight 4 and NHibernate
PPTX
Architecting WPF Applications
PPT
WPF Applications, It's all about XAML these days
PPTX
Meetup - Getting Started with MVVM Light for WPF - 11 may 2019
PPTX
MVVM with WPF
 
PDF
MVVM Light Toolkit Works Great, Less Complicated
PDF
Portable Class Libraries and MVVM
PPTX
Building appsinsilverlight4 part_1
Adopting MVVM
WPF - Controls &amp; Data
The Magic of WPF & MVVM
Mvvm in the real world tccc10
Introduction to XAML and its features
WPF with MVVM: From the Trenches
Advanced MVVM in Windows 8
Xaml programming
Introduction To MVVM
Presentation Model
Applied MVVM in Windows 8 apps: not your typical MVVM session!
WPF For Beginners - Learn in 3 days
Building an enterprise app in silverlight 4 and NHibernate
Architecting WPF Applications
WPF Applications, It's all about XAML these days
Meetup - Getting Started with MVVM Light for WPF - 11 may 2019
MVVM with WPF
 
MVVM Light Toolkit Works Great, Less Complicated
Portable Class Libraries and MVVM
Building appsinsilverlight4 part_1
Ad

More from Nick Pruehs (20)

PDF
Unreal Engine Basics 06 - Animation, Audio, Visual Effects
PDF
Unreal Engine Basics 05 - User Interface
PDF
Unreal Engine Basics 04 - Behavior Trees
PDF
Unreal Engine Basics 03 - Gameplay
PDF
Unreal Engine Basics 02 - Unreal Editor
PDF
Unreal Engine Basics 01 - Game Framework
PDF
Game Programming - Cloud Development
PDF
Game Programming - Git
PDF
Scrum - but... Agile Game Development in Small Teams
PDF
Component-Based Entity Systems (Demo)
PDF
What Would Blizzard Do
PDF
School For Games 2015 - Unity Engine Basics
PDF
Tool Development A - Git
PDF
Game Programming 11 - Game Physics
PDF
Game Development Challenges
PDF
Game Programming 08 - Tool Development
PDF
Game Programming 07 - Procedural Content Generation
PDF
Game Programming 06 - Automated Testing
PDF
Game Programming 05 - Development Tools
PDF
Game Programming 04 - Style & Design Principles
Unreal Engine Basics 06 - Animation, Audio, Visual Effects
Unreal Engine Basics 05 - User Interface
Unreal Engine Basics 04 - Behavior Trees
Unreal Engine Basics 03 - Gameplay
Unreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 01 - Game Framework
Game Programming - Cloud Development
Game Programming - Git
Scrum - but... Agile Game Development in Small Teams
Component-Based Entity Systems (Demo)
What Would Blizzard Do
School For Games 2015 - Unity Engine Basics
Tool Development A - Git
Game Programming 11 - Game Physics
Game Development Challenges
Game Programming 08 - Tool Development
Game Programming 07 - Procedural Content Generation
Game Programming 06 - Automated Testing
Game Programming 05 - Development Tools
Game Programming 04 - Style & Design Principles

Recently uploaded (20)

PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Empathic Computing: Creating Shared Understanding
PDF
Approach and Philosophy of On baking technology
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Electronic commerce courselecture one. Pdf
PDF
Machine learning based COVID-19 study performance prediction
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPT
Teaching material agriculture food technology
Per capita expenditure prediction using model stacking based on satellite ima...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
The AUB Centre for AI in Media Proposal.docx
Spectral efficient network and resource selection model in 5G networks
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Empathic Computing: Creating Shared Understanding
Approach and Philosophy of On baking technology
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Diabetes mellitus diagnosis method based random forest with bat algorithm
sap open course for s4hana steps from ECC to s4
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Programs and apps: productivity, graphics, security and other tools
Electronic commerce courselecture one. Pdf
Machine learning based COVID-19 study performance prediction
Understanding_Digital_Forensics_Presentation.pptx
Teaching material agriculture food technology

Tool Development 10 - MVVM, Tool Chains

  • 1. Tool Development Chapter 10: MVVM, Tool Chains Nick Prühs
  • 3. Objectives • To understand the implications of the MVVM pattern • To get an overview of approaches for tool chains 3 / 58
  • 4. Model-View-Controller • Architectural pattern that separates data from its visual representation • Model: Data, such as names, phone numbers, or health points. • View: Visual representation of that data, such as console output, UI textfields or health bars. • Controller: Layer that separates model from view, serving as interface for any interaction with the data. 4 / 58
  • 6. Model-View-Controller • Allows exchanging views or modifying the model without breaking existing functionality. • For instance, write console client first and GUI client after. • Greatly improves your application architecture through separation of concerns. • Anybody always knows where to look in your code. 6 / 58
  • 7. Model-View-View Model • Architectural pattern that separates data from its visual representation • Model: Data, such as names, phone numbers, or health points. • View: Visual representation of that data, such as console output, UI textfields or health bars. • View Model: Responsible for exposing data from the model in such a way that those objects are easily managed and consumed 7 / 58
  • 9. Model-View-View Model • Attempts to gain both the advantages of separation of functional development provided by MVC as well as leveraging the advantages of data bindings • binds data as close to the pure application model as possible • uses inherent data checking features to validate any incoming data 9 / 58
  • 10. Where Is The Controller? • Substituted by bindings • Synchronize the view model and view • Key enablers of the pattern • Controller sometimes included anyway • Ongoing area of discussion regarding the standardization of the MVVM pattern 10 / 58
  • 11. Drawbacks of MVVM • Overkill for simple UI operations • Can result in considerable memory consumption in very large applications • Where to put event handlers for e.g. button clicks? 11 / 58
  • 12. Data Conversion • Sometimes, you might be willing to bind a property to a value of a different type (e.g. Color to Brush) • WPF allows to you implement the IValueConverter interface for • changing data from one type to another • translating data based on cultural information • modifying other aspects of the presentation 12 / 58
  • 13. Data Conversion XAML 13 / 58 <Window x:Class="DataConversionExample.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:DataConversionExample" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <local:NotConverter x:Key="NotConverter"/> </Window.Resources> <CheckBox Content="Prohibited" IsChecked="{Binding Allowed, Converter={StaticResource NotConverter}}"> </CheckBox> </Window>
  • 14. Data Conversion C# 14 / 58 class NotConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { bool boolValue; if (value == null || !bool.TryParse(value.ToString(), out boolValue)) return null; return !boolValue; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return new NotImplementedException(); } }
  • 15. Data Validation • Most of the time, you need to validate that the user has entered the expected information in the correct format. • Validation checks can be based on type, range, format, or other application-specific requirements. • WPF data binding allows you to associate ValidationRules with your bindings. 15 / 58
  • 16. Data Validation XAML 16 / 58 <Application x:Class="DataValidationExample.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:DataValidationExample" StartupUri="MainWindow.xaml"> <Application.Resources> <ControlTemplate x:Key="ErrorLabel"> <StackPanel> <Border BorderBrush="Red" BorderThickness="1"> <AdornedElementPlaceholder Name="MyAdorner" /> </Border> <TextBlock Foreground="Red" FontSize="8pt" Text="{Binding ElementName=MyAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" /> </StackPanel> </ControlTemplate> </Application.Resources> </Application>
  • 17. Data Validation XAML 17 / 58 <Window x:Class="DataValidationExample.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:DataValidationExample" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <TextBox Validation.ErrorTemplate="{StaticResource ErrorLabel}"> <TextBox.Text> <Binding Path="Name"> <Binding.ValidationRules> <local:StringNotEmptyValidationRule /> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> </Window>
  • 18. Data Validation C# 18 / 58 public class StringNotEmptyValidationRule : ValidationRule { public override ValidationResult Validate(object value, CultureInfo cultureInfo) { var s = value as string; if (s == null || string.IsNullOrEmpty(s)) { return new ValidationResult(false, "Must not be empty."); } return ValidationResult.ValidResult; } }
  • 19. Data Bind for Unity DEMO 19 / 58
  • 20. Cancelling Events • Many of the events in WPF can be cancelled by your code to implement special event handling. • These events usually are provided twice by WPF, one for the actual event, and one for signaling that the event is about to occur • OnClosing • OnClosed 20 / 58
  • 21. Cancelling Events WPF 21 / 58 <Window x:Class="CancelEventExample.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:CancelEventExample" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525" Closing="MainWindow_OnClosing">
  • 22. Cancelling Events C# 22 / 58 private void MainWindow_OnClosing(object sender, CancelEventArgs e) { var result = MessageBox.Show( "Do you want to save your progress before exiting?", "Unsaved Data", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes); if (result == MessageBoxResult.Yes) { e.Cancel = true; // Show save file dialog. } }
  • 23. Tool Chains • Output of one tool is used as input for another • Photoshop -> Sprite Packer, Texture Compression • Build Server -> Git, MSbuild, Unity, NUnit • Visual Studio -> Post-build events • Excel -> VBA • Localization • Unity Editor Scripts 23 / 58
  • 25. Tool Chains • Technical Requirements • Command-line parameters • Non-blocking operation (i.e. must not require user input for proceeding) • Robust error (code) handling • User Requirements • Good understanding of file systems and working directories • Sometimes: Access to system environment variables • Sometimes: Understanding of different OS 25 / 58
  • 28. What You Have Learned  Basic development process of good Desktop apps  Importance of good UI and UX design  Developing basic Desktop applications with WPF  How to approach common I/O tasks in .NET  Best practices of file and stream I/O in general  Advanced XML concepts such as XPath and XSLT  Overview of other common text-based file formats 28 / 58
  • 29. What You Have Learned  How to use reflections to your advantage  How to create reactive UIs with worker threads  How to implement an undo/redo stack  How to interact with the Windows shell  How to globalize and localize WPF applications  How to properly set up automatic tests How to work in teams using GitFlow 29 / 58
  • 30. And now… Go out and make some tools! 30 / 58
  • 31. References • Wikipedia. Model View ViewModel. http://en.wikipedia.org/wiki/Model_View_ViewMo del, June 23, 2014. • MSDN. Data Binding Overview. https://msdn.microsoft.com/en- us/library/ms752347(v=vs.110).aspx, May 2016. • MSDN. IValueConverter interface. https://msdn.microsoft.com/en- us/library/system.windows.data.ivalueconverter(v= vs.110).aspx, May 2016. 31 / 58
  • 33. Thank you for your attention! Contact Mail dev@npruehs.de Blog http://www.npruehs.de Twitter @npruehs Github https://github.com/npruehs 33 / 58