Better User and Developer Experiences – From Windows Forms to WPF with MVVM: Part 1, The Model

Before we can make a user interface for a program, we need to know what the program is going to do.  Hopefully, we have some logic we’re going to be exposing to our users.  Underneath all of the beautiful user interfaces we build there is something that we’re trying to accomplish, some data we’re editing or information we’re conveying.  Before we can discuss how to make an effective user experience, we need to define the core information with which we are working.

Read more

Better User and Developer Experiences – From Windows Forms to WPF with MVVM: Introduction

I frequently talk to people trying to decide, for a new project, between Windows Forms and Windows Presentation Foundation.  After spending time with WPF, I feel there is no reason to choose Windows Forms for new development.  WPF, when used correctly, is far superior, both in terms of user experience, but also developer productivity.

I feel that the confusion around choosing WPF really stems from a lack of understanding about WPF.  Even people on my own team have been overwhelmed trying to understand how the different pieces of WPF fit together, and how to apply the new concepts introduced with WPF effectively.  In order to address this, I’m going to break this down into a few simple pieces, and show the migration in terms of thought required to transition from being a good Windows Forms developer to an effective WPF developer.

Read more

Christmas Trees in WPF, 2017 Update

Last year, I wrote about making Christmas Trees in WPF using Gjallarhorn. The Gjallarhorn project has improved dramatically since last year, and I thought I’d update the project, demonstrating the newer API and significant improvements in usability and ease of development. I recommend skimming through the previous post, as this post expands on the information there.

This post will modernize the Christmas Tree application from last year, improving it, and highlighting the changes in Gjallarhorn, showing the dramatic improvements inspired by great projects like Elmish. My hope is that more developers will see the benefits of unidirectional architecture for UI development, and try using Elmish for web, Gjallarhorn for XAML, or other unidirectional, functional approaches to user interfaces. Read more

Christmas Trees in WPF, 2016 Edition

Last year, I wrote about making Christmas Trees in WPF using FSharp.ViewModule.  At the time, I was excited being able to demonstrate how FSharp.ViewModule could make typical MVVM much more functional feeling.  This year, for my F# Advent Calendar contribution, I want to demonstrate how Gjallarhorn.Binding can serve as a replacement, and help create a WPF application with a design that is clean, functional, and most importantly, simple.

This post will modernize the Christmas Tree application from last year, improving it, and highlighting the differences between a classic MVVM approach to WPF and a more functional approach.  While reading through the post from last year would add context, it’s completely optional.

Read more


I frequently blog about topics of which I am quite fond.  Many of these topics are far too large to fit into a single blog post, and become a full series upon a single topic.

These series of posts are listed below, with full details available on their corresponding pages.

 C# 5 Async – (Work in Progress)

This series discusses the new Visual Studio Async CTP.

Parallelism in .NET – (Work in Progress)

This series discusses the new parallelism functionality in .NET 4.  Subjects are introduced slowly, based upon well known patterns.  This is a very detailed, in depth approach to the concurrency tools available with .NET 4.0.

Better User and Developer Experiences – From Windows Forms to WPF with MVVM

This nine part series introduces the Model-View-ViewModel pattern.  It is geared towards Windows Forms developers, introducing new capabilities in Windows Presentation Foundation, and showing how the developer experience can be improved by using WPF via MVVM.

IDisposable – The oft misunderstood and misused interface

This five part series introduces the IDisposable interface, showing the different requirements to implement it effective depending on the scenario for usage.


Occasionally, I’m fortunate enough to be given the opportunity to speak on the subjects I love.  I am currently registered as an INETA Regional Speaker, and am open to speaking to at NW regional user group meetings or conferences.  If you are a user group leader or event coordinator, please feel free to contact me if you’d like me to speak at your event.  If you are interested in the subjects of which I blog, and are in the area, please consider coming to one of my talks.

My recent talks, as well as up-coming schedule, are all listed here.

In addition, I occasionally make some of the material from my talks available for download.  When possible, this will be included along with the full description of the presentation.

Upcoming Schedule:

November 1st, 2011:

Thinking about Performance in .NET

Presenting to Bellingham .NET Users Group, Bellingham, WA

Previous Engagements:

March 28th, 2011:

 Visual Studio Async CTP – Simplified Asynchronous Programming

 Presented to .NET Developers Association, Redmond, WA

December 8th, 2010:

Async & Await Support in C# 5

Presented to Bellingham .NET Users Group, Bellingham, WA

April 17th and 18th, 2010 (3 Talks):

Basics of the Model-View-ViewModel Pattern

PLINQ and the Task Parallel Library

Parallel Programming Pitfalls

Presented at Seattle Code Camp

February 10th, 2010:

Moving from Windows Forms to WPF with MVVM

Presented to Seattle .NET User Group

February 8th, 2010:

Parallel Patterns in .NET

Presented to .NET Developers Association, Redmond, WA

December 9th, 2009:

Parallel Patterns in .NET

Presented to Bellingham .NET Users Group, Bellingham, WA

Parallelism in .NET – Part 15, Making Tasks Run: The TaskScheduler

In my introduction to the Task class, I specifically made mention that the Task class does not directly provide it’s own execution.  In addition, I made a strong point that the Task class itself is not directly related to threads or multithreading.  Rather, the Task class is used to implement our decomposition of tasks

Once we’ve implemented our tasks, we need to execute them.  In the Task Parallel Library, the execution of Tasks is handled via an instance of the TaskScheduler class.

Read more

Synchronizing .NET 4 Tasks with the UI Thread

While attending the Patterns of Parallel Programming Workshop at PDC, I picked up a very interesting tidbit from Stephen Toub’s talk: the new Task pattern in .NET 4 has built-in support for synchronization with the UI thread.  This makes writing parallel applications that interact with the user interface easier than ever before.

Read more

« Previous Page