2009-12-22 3 views
4

DataTemplate을 앱의 리소스 사전에 추가하는 방법을 알아 내려고하고 있습니다. 저는 DataTemplate이 (URL을 통해) XAML에있을 때 그렇게하는 방법에 익숙하지만, DataTemplate이 코드에 정의되어있을 때 그렇게하는 방법은별로 모호합니다. 내가 DataTemplate을이 응용 프로그램의 리소스 사전으로하지 않습니다 수 가장 잘 같은 오류를 던지고되지에도 불구하고 : IS-DataTemplate (비 XAML)을 코드의 리소스 사전에 추가 하시겠습니까?

 //Create DataTemplate 
     DataTemplate template = new DataTemplate(typeof(CoordinateViewModel)); 
     FrameworkElementFactory ViewStack = new FrameworkElementFactory(typeof(CoordinateView)); 
     ViewStack.Name = "myViewStack"; 

     template.VisualTree = ViewStack; 


     ResourceDictionary dictionary = new ResourceDictionary(); 
     dictionary.BeginInit(); 
     dictionary.Add(template, template); 
     dictionary.EndInit(); 

     App.Current.Resources.MergedDictionaries.Add(dictionary); 

EDIT 작동하지 않는 내가 무엇을 가지고

. ViewModel이 나중에 XAML에서 호출되면 해당 ViewModel을 표시 할 적절한 DataTemplate이없는 것처럼 작동합니다. 예를 들어, 텍스트 "ShellPrototype.ViewModels.CoordinateViewModel"displayed- EG와 빈 창에

<StackPanel> 
    <ContentPresenter Content="{Binding ViewModel}" /> 
</StackPanel> 

결과, 그것은보기를 표시하는 템플릿이 없습니다.

+0

"작동하지 않는다"고 할 수 있겠습니까? 예외? 사전에서 검색 할 수 없습니까? (어떻게 사전에서 검색하려고합니까?) 사전에서 뭔가를 얻고 있지만 예상 한 것과 다릅니다. – itowlson

+0

예, 잠깐만 죄송합니다. 게시물을 업데이트했습니다. 즉, DataTemplate은 사전에서 검색 할 수 없습니다. –

답변

2

열쇠는 여기에, 제대로이 일을하기 위해, DataTemplateKey을 사용하는 것입니다 : 이렇게하면 지정된대로 작동한다

ResourceDictionary dictionary = new ResourceDictionary(); 
dictionary.Add(new DataTemplateKey(typeof(CoordinateViewModel)), template); 

. 그러나 FrameworkElementFactory은 문서에 따르면 "프로그래밍 방식으로 템플릿을 만드는 대신 사용되지 않는 방법"이므로 XAML을 직접 구문 분석 할 수 있습니다.

관련 문제