Binding on Style Setters with Silverlight 5

Silverlight 5 has introduced a lot of new features and one of them is the ability to set binding on StyleSetters. This great feature was heavily missing from the earlier Silverlight version. The functionality is pretty useful and is extensively used in WPF applications.

Implementing MVVM scenarios with controls inherited from ItemsControls is not an easy way and sometimes may require a lot of work.

Say binding IsSelected on C1TreeView or binding GroupName/HeaderBackground in C1Menu. There are lot of workarounds to these scenarios.

Setting binding in Style Setters is really helpful in these scenarios and it does reduces a lot of work.

Lets see this by an example. Below are the simple classes that we will be using for binding purposes:-

As you can see from the above xaml code, we have used the ItemContainerStyle and bound the IsSelected property on the C1TreeViewItem with the IsSelected property exposed on our class. That was pretty simple. Isnt It?

With earlier versions, you may have to use some helper classes like SetterValueBindingHelper to achieve the same thing.

You can set similar type of styles to most of the controls inherited from ItemsControl like C1Menu, C1Accordion, C1Book etc. while still obeying the rules of standard MVVM.

The things doesn't stop here. With this new feature, its pretty easy to bind the C1DataGrid's row /cell background/foreground/fontweight etc. all in xaml without manually setting the properties in code. See below xaml code which binds the IsAvailable property on the bound item to DataGridRowPresenters Background/Fontweight:-