2012-10-14 5 views
2

나는 ListBox과 복수 DataTemplate을 별도의 파일에 가지고 있습니다. Styles.xaml 파일에서DataTemplate에 동적으로 바인딩

<ListBox ItemTemplate="{StaticResource ItemTemplate1}"/> 

:

<DataTemplate x:Key="ItemTemplate1">...</DataTemplate> 

<DataTemplate x:Key="ItemTemplate2">...</DataTemplate> 

나는 그것의 목록에서의 객체의 유형에 따라 ListBoxItemTemplate을 변경하고 싶습니다.

Page 속성에 바인딩 할 수 있도록 코드 숨김에서 별도의 DataTemplate에 액세스하는 방법이 있습니까?

답변

1

TemplateSelector없이이 작업을 수행하는 방법은 DataType 속성을 지정하고 x : Key를 지정하지 않는 것입니다.

<DataTemplate DataType="{x:Type Type1}">...</DataTemplate> 
<DataTemplate DataType="{x:Type Type2}">...</DataTemplate> 

이 경우 적절한 유형의 속성이 바인딩 된 모든 장소에서 적절한 DataTemplate이 자동 적용됩니다.

하지만 TemplateSelector을 사용하고 싶습니다. 먼저 리소스 사전을 받아야에 액세스하려면

가에 DataTemplate을 분리 뒤에 코드 : 참고로

var dataTemplate = (DataTemplate) dict["ItemTemplate1"]; 
+0

:

var dict = new ResourceDictionary {Source = new Uri("/ProjectNamespace;component/Styles.xaml", UriKind.Relative)}; 

은 그럼 당신은 템플릿을 얻을 수 있습니다. WinRT DataTemplate 클래스는 DataType을 지원하지 않습니다. – Denis

+0

@Denis, 예, 감사합니다. 나는 그것을 기억할 것이다 :) – 2kay

0

요구 사항에 따라 WPF에 inbuilt가 지원됩니다. DataTemplateSelector에서 읽기 시작하여 특정 기준에 따라 런타임에 템플리트를 선택하십시오.

관련 문제