DataTemplate

14/10/2008 - 10:59 von Thomas Schremser | Report spam
Hallo allerseits!

Ich habe in einem WPF-GUI ein TreeView, das verschiedenartige Nodes anzeigen
soll, z.b. Labels, OptionButtons, etc. Jedem Node-Typ entspricht dabei eine
Klasse, die Darstellung mache ich über DataTemplate:

<DataTemplate DataType="{x:Type aswp:LabelNode}">
<TextBlock Margin="2,4,4,2" FontWeight="SemiBold">
<TextBlock.Text>
<Binding Path="NodeText" Mode="OneWay" />
</TextBlock.Text>
</TextBlock>
</DataTemplate>

Das funktioniert soweit ganz gut, nur habe ich jetzt als Node-Typ eine
generische Klasse ListNode<T>. Ich hab' schon

<DataTemplate DataType="{x:Type aswp:ListNode}">

sowie

<DataTemplate DataType="{x:Type aswp:ListNode<T>}">

und

<DataTemplate DataType="{x:Type aswp:ListNode(T)}">

versucht, aber jedesmal erhalte ich einen Compiler-Error. Wie gebe ich den
Datentyp korrekt im DataTemplate an?

TIA

Grüße
Thomas

Any problem in computer science can be solved with another layer
of indirection. But that usually will create another problem.
David Wheeler
 

Lesen sie die antworten

#1 Frank Dzaebel
14/10/2008 - 11:28 | Warnen spam
Hallo Thomas,

Das funktioniert soweit ganz gut, nur habe ich
jetzt als Node-Typ eine generische Klasse ListNode<T>.



ungeprüft:

[The Hidden C# "Typedef" - I Got Rhythm]
http://arbel.net/blog/archive/2004/...2200_.aspx


Actually, there is an easy way to define a DataTemplate for a generic
type, for example:

<DataTemplate DataType="{x:Type col:List`1[System.String]}">
<TextBlock Text="This is a List{string}" Foreground="Red" />
</DataTemplate>

A few notes:

1. The TypeExtension only resolves the namespace before the colon and
passes a concatenation of it and the what's after the colon to
Assembly.GetType(). So you cannot use the XAML namespace mapping for
the type parameter (e.g. col:List`1[sys:String]).

2. You can always write your own type-parsing MarkupExtension for more
complex scenarios.

3. You can implement a DataTemplateSelector. In many cases the
DataTemplate.DataType is quite insufficient. The simplest example - it
doesn't support inheritance; the type must exactly match the runtime
type of the object.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen