DataTemplateSelector Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Ger ett sätt att välja ett DataTemplate baserat på dataobjektet och det databundna elementet.
public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
- Arv
-
DataTemplateSelector
Exempel
I det här exemplet är bindningskällan en lista över Task objekt. En av egenskaperna för ett Task objekt är Priority. Det finns två definierade myTaskTemplate datamallar och importantTaskTemplate.
Om du vill ange logik för att välja vilken som DataTemplate ska användas baserat på värdet för Priority dataobjektet skapar du en underklass av DataTemplateSelector och åsidosätter SelectTemplate metoden. I följande exempel SelectTemplate tillhandahåller metoden logik för att returnera lämplig mall baserat på egenskapens Priority värde. Mallen som ska returneras finns i resurserna i det omslutande Window elementet.
using System.Windows;
using System.Windows.Controls;
namespace SDKSample
{
public class TaskListDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate
SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element != null && item != null && item is Task)
{
Task taskitem = item as Task;
if (taskitem.Priority == 1)
return
element.FindResource("importantTaskTemplate") as DataTemplate;
else
return
element.FindResource("myTaskTemplate") as DataTemplate;
}
return null;
}
}
}
Namespace SDKSample
Public Class TaskListDataTemplateSelector
Inherits DataTemplateSelector
Public Overrides Function SelectTemplate(ByVal item As Object, ByVal container As DependencyObject) As DataTemplate
Dim element As FrameworkElement
element = TryCast(container, FrameworkElement)
If element IsNot Nothing AndAlso item IsNot Nothing AndAlso TypeOf item Is Task Then
Dim taskitem As Task = TryCast(item, Task)
If taskitem.Priority = 1 Then
Return TryCast(element.FindResource("importantTaskTemplate"), DataTemplate)
Else
Return TryCast(element.FindResource("myTaskTemplate"), DataTemplate)
End If
End If
Return Nothing
End Function
End Class
End Namespace
Vi kan sedan deklarera TaskListDataTemplateSelector som en resurs:
<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>
För att använda resursen för mallväljaren, tilldela den till ItemTemplateSelector-egenskapen av ListBox.
ListBox anropar metoden SelectTemplate av TaskListDataTemplateSelector för varje objekt i den underliggande samlingen. Anropet skickar dataobjektet som objektparameter. Det DataTemplate som returneras av metoden tillämpas sedan på det dataobjektet.
<ListBox Width="400" Margin="10"
ItemsSource="{Binding Source={StaticResource myTodoList}}"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
HorizontalContentAlignment="Stretch"/>
För det kompletta exemplet, se Introduktion till datamall-exemplet.
Kommentarer
Vanligtvis skapar du en DataTemplateSelector när du har fler än en DataTemplate för samma typ av objekt och du vill ange din egen logik för att välja en DataTemplate som ska tillämpas baserat på egenskaperna för varje dataobjekt. Observera att om du har objekt av olika typer kan du ange DataType egenskapen på DataTemplate. Om du gör det behöver du inte skapa en DataTemplateSelector. Om du har objekt av samma typ men med olika egenskaper kan du också överväga att använda en DataTrigger datakonverterare eller en datakonverterare. Mer information finns i Översikt över dataöverläggning.
Om du vill skapa en mallväljare skapar du en klass som ärver från DataTemplateSelector och åsidosätter SelectTemplate metoden. När klassen har definierats kan du tilldela en instans av klassen till mallväljaregenskapen för ditt element.
Konstruktorer
| Name | Description |
|---|---|
| DataTemplateSelector() |
Initierar en ny instans av DataTemplateSelector klassen. |
Metoder
| Name | Description |
|---|---|
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| SelectTemplate(Object, DependencyObject) |
När den åsidosätts i en härledd klass returneras en DataTemplate baserad på anpassad logik. |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |