XAML 2009 Features: Generics Support

This is part of a series on New WPF\XAML Features

XAML 2009 supports generics J .. In previous releases, if you needed to have an observableCollection for databinding you would probably have written code like

class PersonCollection:ObservableCollection<Person>{}

    <l:PersonCollection>

        <Person Name="Tom" />

    </l:PersonCollection>

In this release, you can now write this as

        <ObservableCollection x:TypeArguments='local:Person' xmlns='clr-namespace:System.Collections.ObjectModel;assembly=System'  >

            <local:Person Name='Tom' Age='21' />

        </ObservableCollection>

       …

        <ListBox ItemsSource='{Binding}' DisplayMemberPath='Name'></ListBox>

 

Notice the use of TypeArguments to specify the collection type (Person in this case). It is used to pass the required constraints for a generic type

Lets go for some more examples. Simple Dictionary with the key\value pair being strings

<StackPanel.DataContext>

    <coll:Dictionary  x:TypeArguments='x:String, x:String' xmlns:coll='clr-namespace:System.Collections.Generic;assembly=mscorlib'>

        <x:String x:Key='One'>1</x:String>

        <x:String x:Key='Two'>2</x:String>

    </coll:Dictionary>

</StackPanel.DataContext>

    <ListBox ItemsSource='{Binding}'  DisplayMemberPath='Key' Width='100'></ListBox>

 

Next we have a slightly more complicated dictionary with an object as the key\value pair. Interesting to note here is that Key

<StackPanel.DataContext>

    <coll:Dictionary x:TypeArguments='p:Object, p:Object' xmlns:p='clr-namespace:System;assembly=mscorlib'>

        <Point X='42' Y='3' >

            <x:Key>

                <Point X='100' Y='1' />

            </x:Key>

        </Point>

        <x:Null x:Key='three' />

    </coll:Dictionary>

</StackPanel.DataContext>

    <ListBox ItemsSource='{Binding}'  DisplayMemberPath='Value' Width='100'></ListBox>

 

And finally a nested dictionary sample

<StackPanel.Resources>

    <coll:Dictionary x:TypeArguments='p:Object, coll:Dictionary(p:Object, p:Object)' x:Key='NestedItems'>

        <coll:Dictionary x:Key='Dictionary1' x:TypeArguments='x:Object, x:Object'>

            <x:String x:Key='One'>1</x:String>

            <Point X='42' Y='3'>

                <x:Key>

                    <Point X='11' Y='22' />

                </x:Key>

            </Point>

        </coll:Dictionary>

    </coll:Dictionary>

</StackPanel.Resources>

<ListBox ItemsSource='{StaticResource NestedItems}' DisplayMemberPath='Key'></ListBox>

 

Sample app showing the usage is attached.

 Note that XAML 2009 features work only for loose XAML in WPF.

 

Share this post

 

Generics.zip