The past

This post is one of frustration.  Over ten years ago, I started going learning C# and became really proficient.  I would have rated myself a very high 9/10 – you’ll next to never see me rate myself a perfect 10/10 as I feel strongly that nobody can know everything about a topic – but that’s for another article.

When Microsoft changed the game by introducing WPF, I would have rated myself 8/10 – the WPF added another layer with lots of intricacies.

Then came the popularity of MVVM.  This methodology is complex and really makes it so that a 3-hour project becomes 3 days instead.  In situations with Graphic Designers and Programmers, it just might make sense – but not in the everyday sense.  At this point, I’m bringing myself down to 6/10 – there is just way too much information for any single human to consume on MVVM.

The present

Now, let’s see where we are today.  It looks like Microsoft’s Universal Windows Platform (UWP) is the new thing in town.  It supports differing combinations of languages – C#/XAML, Javascript/HTML/CSS, C++/XAML, etc.  It’s presented as if it is WPF, but you would think it has more.  Well, it’s not that it has more – it’s that it has differences.  And that’s what is bothering me.

I feel like UWP is presented as if it is built on top of the previous technologies (e.g. WPF, Silverlight, etc).  But instead, the developers took out features that I’ve grown to understand using WPF over the years.

And to add to the frustration, searching for topics online brings a mix of WPF and UWP where the majority is still WPF.  Many of those WPF topics do not apply to UWP, although, they certainly feel like they should.  You even have people on various forums answering UWP questions with WPF answers – so confusing.

I feel like I’m at a 4/10 on UWP.  Nobody with a huge Microsoft background, like me, should ever feel that way.

The list

Upon working with UWP, I’m making a list here of features that are expected.  Many of these were in WPF and some are still missing, but should be made available.  I intend to update this list periodically as I continue to use the tech.

  • MultiBinding is now missing.
  • ConverterParameter does not allow for Binding.
  • ICommand expects the programmer to raise the CanExecuteChanged event – seriously?
  • DataTriggers are gone.
  • VisualStateManager has been introduced, which is a cool idea, but now the only way to set properties is with complex Storyboards.
  • VisualStateManager definitions make ControlTemplates very large.
  • The default VisualStudio for a Universal project must be 3x more files than that of a WPF project.
  • Installing a UWP app is more complicated than simply clicking and moving a WPF executable.
  • DockPanel is gone – actually, a lot of WPF controls are gone and have been replaced with other controls.  Adding controls is fine, replacing is not.
  • Already reading up that AppBar is being phased out in favor of CommandBar.
  • x:Static bindings are gone.
  • x:Type bindings are gone – good luck passing a type into a CommandParameter.

Summary

I’ve always felt strongly about not breaking backwards-compatibility.  It certainly appears that Microsoft is merging their internal WPF and Silverlight teams, but they are taking the intersection of the two techs instead of a superset.  Here’s hoping they can make up their mind and stick with it for a significant period of time.