DataTemplateSelector.SelectTemplate(Object, DependencyObject) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Türetilmiş bir sınıfta geçersiz kılındığında, özel mantığı temel alan bir DataTemplate döndürür.
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
Parametreler
- item
- Object
Şablonun seçildiği veri nesnesi.
- container
- DependencyObject
Veriye bağlı nesne.
Döndürülenler
veya DataTemplate null
döndürür. null
varsayılan değerdir.
Örnekler
Bu örnekte bağlama kaynağı bir nesne listesidir Task
. Bir Task
nesnenin özelliklerinden biri de şeklindedir Priority
. tanımlanmış myTaskTemplate
iki veri şablonu vardır ve importantTaskTemplate
.
Veri nesnesinin değerine göre hangisinin DataTemplate kullanılacağını seçmek üzere mantık sağlamak için bir alt sınıfı DataTemplateSelector oluşturun ve yöntemini geçersiz kılınSelectTemplate.Priority
Aşağıdaki örnekte yöntemi, özelliğinin SelectTemplate değerine Priority
göre uygun şablonu döndürmek için mantık sağlar. Döndürülecek şablon, zarflama Window öğesinin kaynaklarında bulunur.
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
Ardından öğesini TaskListDataTemplateSelector
kaynak olarak bildirebiliriz:
<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>
Şablon seçici kaynağını kullanmak için, öğesinin ItemTemplateSelector özelliğine atayın ListBox. , ListBox temel alınan koleksiyondaki öğelerin her biri için yöntemini TaskListDataTemplateSelector
çağırırSelectTemplate. çağrısı, veri nesnesini öğe parametresi olarak geçirir. DataTemplate yöntemi tarafından döndürülen daha sonra bu veri nesnesine uygulanır.
<ListBox Width="400" Margin="10"
ItemsSource="{Binding Source={StaticResource myTodoList}}"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
HorizontalContentAlignment="Stretch"/>
Tam örnek için bkz. Veri Şablon Oluşturma Örneğine Giriş.
Açıklamalar
Genellikle, aynı tür nesneler için tanımlanmış birden fazla veri şablonunuz olduğunda bir şablon seçici kullanırsınız. Örneğin, bağlama kaynağınız öğrenci nesnelerinin listesini listelediyse ve yarı zamanlı öğrencilere belirli bir şablon uygulamak istiyorsanız. Bunu, öğesinden DataTemplateSelector devralan bir sınıf oluşturarak ve yöntemini geçersiz kılarak SelectTemplate yapabilirsiniz. Sınıfınız tanımlandıktan sonra, öğesinin şablon seçici özelliğine sınıfının bir örneğini atayabilirsiniz.