DataTemplateSelector.SelectTemplate(Object, DependencyObject) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Wanneer deze wordt overschreven in een afgeleide klasse, wordt een DataTemplate resultaat geretourneerd op basis van aangepaste logica.
public:
virtual System::Windows::DataTemplate ^ SelectTemplate(System::Object ^ item, System::Windows::DependencyObject ^ container);
public virtual System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container);
abstract member SelectTemplate : obj * System.Windows.DependencyObject -> System.Windows.DataTemplate
override this.SelectTemplate : obj * System.Windows.DependencyObject -> System.Windows.DataTemplate
Public Overridable Function SelectTemplate (item As Object, container As DependencyObject) As DataTemplate
Parameters
- item
- Object
Het gegevensobject waarvoor u de sjabloon wilt selecteren.
- container
- DependencyObject
Het gegevensgebonden object.
Retouren
Geeft als resultaat een DataTemplate of null. De standaardwaarde is null.
Voorbeelden
In dit voorbeeld is de bindingsbron een lijst Task met objecten. Een van de eigenschappen van een Task object is Priority. Er zijn twee gegevenssjablonen gedefinieerd en myTaskTemplateimportantTaskTemplate.
Als u logica wilt opgeven om te kiezen welke DataTemplate u wilt gebruiken op basis van de Priority waarde van het gegevensobject, maakt u een subklasse van DataTemplateSelector en overschrijft u de methode SelectTemplate. In het volgende voorbeeld biedt de methode SelectTemplate logica om de juiste sjabloon te retourneren op basis van de waarde van de eigenschap Priority. De sjabloon die moet worden geretourneerd, vindt u in de resources van het omhullende Window element.
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
Vervolgens kunnen we de TaskListDataTemplateSelector declareren als een resource:
<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>
Als u de sjabloonkiezerresource wilt gebruiken, wijst u deze toe aan de eigenschap ItemTemplateSelector van de ListBox. De ListBox roept de SelectTemplate methode van de TaskListDataTemplateSelector aan voor elk van de items in de onderliggende verzameling. De aanroep geeft het gegevensobject door als de itemparameter. De DataTemplate die door de methode wordt geretourneerd, wordt vervolgens toegepast op dat gegevensobject.
<ListBox Width="400" Margin="10"
ItemsSource="{Binding Source={StaticResource myTodoList}}"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
HorizontalContentAlignment="Stretch"/>
Voor het volledige voorbeeld, zie Inleiding tot data-templatesample.
Opmerkingen
Normaal gesproken gebruikt u een sjabloonkiezer wanneer u meer dan één gegevenssjabloon hebt gedefinieerd voor hetzelfde type objecten. Als uw bindingsbron bijvoorbeeld een lijst met studentobjecten bevat en u een bepaalde sjabloon wilt toepassen op de parttime studenten. U kunt dit doen door een klasse te maken die de methode overschrijft en overschrijft DataTemplateSelectorSelectTemplate . Zodra uw klasse is gedefinieerd, kunt u een exemplaar van de klasse toewijzen aan de eigenschap sjabloonkiezer van uw element.