Recently I had a chance to work on a project in which the requirement was to select various types of data templates based on the data. I
encountered a bit difficulty, but afterwards I
managed to get it work.
Let's have a look at the scenario first. Inside a WPF ListView, there are two GridViewColumns for storing Name and Age. Now
the requirement is to highlight the name of the person based on certain age criteria. If the age is below 25, then
the name should be highlighted as red else it should be in the green color, with the desired background. I know there are ways to implement this using the concept of triggers, but I personally refrain from using triggers for
performance reasons.
So, what else
???
The option left was dynamically selecting data templates. In this article I will write about the simplest approach and later on I'll do the same thing using a Dictionary. Well, let's begin with our code.
First of all, I created a class named Employee and added some data that will be displayed on
the UI. The code to perform this is:
The next thing I
did is, defined the two DataTemplates in XAML as:
Once the data templates are defined,
the next task is to determine how to select the data templates dynamically. So to do this, Microsoft has
provided the class DataTemplateSelector. Using this class, one can select the data templates based on the business requirements and here is the code:
The next task is to bind this newly created class named MyTemplateSelector
without XAML. So, in order to perform this task, I created a ResourceDictionary and kept both the data templates inside it as:
Until here we are almost done. The only thing pending is binding our ListView control to collection and setting the cell template, that can be done as:
Once everything is in place, we will get the desired output:
All the preceding can be done by inheriting from the MarkupExtension class also. I will
cover that in my next article.