DataTemplateSelector.SelectTemplate(Object, DependencyObject) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
파생 클래스에서 재정의된 경우 사용자 지정 논리에 따라 DataTemplate 을 반환합니다.
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
매개 변수
- item
- Object
템플릿을 선택할 데이터 개체입니다.
- container
- DependencyObject
데이터 바인딩된 개체입니다.
반환
DataTemplate 또는 null
를 반환합니다. 기본값은 null
입니다.
예제
이 예제에서는 바인딩 소스는 목록을 Task
개체입니다. 속성 중 하나를 Task
개체가 Priority
합니다. 정의 하는 두 개의 데이터 템플릿이 myTaskTemplate
고 importantTaskTemplate
입니다.
선택 하는 논리를 제공 DataTemplate 에 따라 사용 하는 Priority
값 데이터 개체의 서브 클래스를 만든 DataTemplateSelector 재정의 SelectTemplate 메서드. 다음 예제에서는 SelectTemplate 의 값을 기반으로 적절 한 템플릿을 반환 하는 논리를 제공 하는 메서드는 Priority
속성입니다. 반환할 템플릿은 상위의 리소스에 위치한 Window 요소입니다.
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
그런 다음 TaskListDataTemplateSelector
를 리소스로 선언할 수 있습니다.
<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>
템플릿 선택기 리소스를 사용 하려면 할당에 ItemTemplateSelector 의 속성을 ListBox. ListBox 호출을 SelectTemplate 메서드의 TaskListDataTemplateSelector
각 내부 컬렉션에서 항목에 대 한 합니다. 이 호출은 데이터 개체를 항목 매개 변수로 전달합니다. DataTemplate 에서 반환 하는 메서드가 데이터 개체에 적용 됩니다.
<ListBox Width="400" Margin="10"
ItemsSource="{Binding Source={StaticResource myTodoList}}"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
HorizontalContentAlignment="Stretch"/>
전체 샘플을 보려면 Introduction to Data Templating Sample(데이터 템플릿 샘플 소개)을 참조하세요.
설명
일반적으로 사용자에 게 동일한 유형의 개체에 대해 정의 된 둘 이상의 데이터 템플릿이 템플릿 선택기를 사용 합니다. 예를 들어 바인딩 소스 목록인 경우 학생 개체의 목록을 비상근 학생에 게 특정 템플릿에 적용 하려고 합니다. 상속 되는 클래스를 만들어 이렇게 DataTemplateSelector 재정의 SelectTemplate 메서드. 클래스 정의 되 면 클래스의 인스턴스를 요소의 템플릿 선택기 속성에 할당할 수 있습니다.