annonymously
annonymously

Reputation: 4708

Bind to a DataTemplate dynamically

I have a ListBox and multiple DataTemplates, in separate files.

<ListBox ItemTemplate="{StaticResource ItemTemplate1}"/>

In the Styles.xaml file:

<DataTemplate x:Key="ItemTemplate1">...</DataTemplate>

<DataTemplate x:Key="ItemTemplate2">...</DataTemplate>

I want to change the ItemTemplate of the ListBox depending on the type of object that's in its list.

Is there a way to access the separate DataTemplates in the code-behind, so that I can bind to a property of my Page?

Upvotes: 2

Views: 3067

Answers (3)

tukaef
tukaef

Reputation: 9224

The way to do that without TemplateSelector is to specify DataType property and don't specify x:Key.

<DataTemplate DataType="{x:Type Type1}">...</DataTemplate>
<DataTemplate DataType="{x:Type Type2}">...</DataTemplate>

In this case appropriate DataTemplate will be automaticly applied in all places where property of specified type have been bound.

But I'd prefer to use TemplateSelector.

To access separated DataTemplate in code-behind you should first get resource dictionary:

var dict = new ResourceDictionary 
{Source = new Uri("/ProjectNamespace;component/Styles.xaml",  UriKind.Relative)};

Then you can get template:

var dataTemplate = (DataTemplate) dict["ItemTemplate1"];

Upvotes: 1

Rohit Vats
Rohit Vats

Reputation: 81313

There is inbuilt support in WPF for your requirement. Start reading on DataTemplateSelector to select the template at runtime based on certain criteria.

Upvotes: 0

Amitd
Amitd

Reputation: 4859

Try this solution does pretty much what your trying to achieve:

Applying Data Templates Dynamically by Type in WP7

http://www.codeproject.com/Articles/113152/Applying-Data-Templates-Dynamically-by-Type-in-WP7

Its based on WP7 but should work for you too.

Upvotes: 1

Related Questions