December 30, 2014

DataPipe: Pushing read-only dependency properties to view model

ActualWidth and ActualHeight are perhaps the most well-known read-only properties in WPF, but there are many other uses for read-only properties, mostly to expose various control states. XAML allows you to use read-only properties as a source for data-binding but not as a binding target. That makes sense until you consider OneWayToSource bindings, which are commonly used to push property value up into the view model. I will now present an elegant and general technique for getting these properties to view model with pure XAML code.

Collection properties for Assisticant.Facades

Assisticant.Facades provides for easy & clean authoring of WPF controls. Just declare your exposed properties, your computed properties, and the rest is straightforward XAML data binding. Unfortunately, Assisticant.Facades in its initial version only supported scalar dependency properties. I will now describe how to use updated Assisticant.Facades to expose collection-type dependency properties to control's view model.

December 5, 2014

No more DependencyProperty with AutoDependencyProperty.Fody

DependencyProperty declarations in WPF are ridiculously redundant and repetitive. Sure there are code snippets that will generate all the boilerplate, but the generated code is a mess to read. The only way to remove the boilerplate while keeping WPF happy is to generate the code during build and that's what my AutoDependencyProperty.Fody is for.

December 1, 2014

Easy WPF control authoring with Assisticant.Facades

Assisticant is a breath of fresh air for all WPF programmers. There's no longer any need for event handlers and other stone age WPF concepts. Everything is just data binding and commands. Until, well, the time comes to design some custom control for your project. Vanilla Assisticant won't help you here and you are back to the messy event handlers. That's why I created Assisticant.Facades, an extension to Assisticant that makes control authoring a breeze.