2013-09-27 14 views
0

的循環依賴我想用一個HierarchicalDataTemplate與DataTemplateSelector但我得到的麻煩與秩序: 向前聲明來解決的DataTemplate

<UserControl.Resources> 
    <HierarchicalDataTemplate x:Key="TemplateA" 
           ItemsSource="{Binding AnySource}" 
           ItemTemplateSelector="{StaticResource MyTemplateSelector}" > 
     <Label Content="A" /> 
    </HierarchicalDataTemplate> 

    <DataTemplate x:Key="TemplateB"> 
     <Label Content="B" /> 
    </DataTemplate> 

    <viewmodel:MyTemplateSelector 
     TemplateA="{StaticResource TemplateA}" 
     TemplateB="{StaticResource TemplateB}" 
     x:Key="MyTemplateSelector" /> 

    <HierarchicalDataTemplate x:Key="TemplateC" 
           ItemsSource="{Binding AnotherSource}" 
           ItemTemplateSelector="{StaticResource MyTemplateSelector}"> 
     <Label Content="C" /> 
    </HierarchicalDataTemplate> 
</UserControl.Resources> 
<Grid> 
    <TreeView 
     ItemsSource="{Binding Source={StaticResource SomeList}}" 
     ItemTemplate="{StaticResource TemplateC}"/> 
</Grid> 

MyTemplateSelector取決於TemplateA和TemplateA取決於MyTemplateSelector。運行時出現System.Windows.Markup.XamlParseException。在XAML中有前向聲明的方法還是有不同的解決方案?

解決方案: 我已經找到了解決辦法:我並不需要,因爲它是在父的DataTemplate設置來設置TemplateSelector在TemplateA。有時候可以這麼簡單...

+0

必須有一些更好的方法來做你正在做的事情......你可以分享你的應用模板的位置以及你想要綁定的數據結構是什麼? – Nitin

+0

我已經添加了一些信息,但我認爲他們沒有幫助。要綁定的數據結構很複雜,以簡單的方式顯示在這裏,但我知道:我需要DataTemplateSelector。 – user37337

回答

3

[看來你是通過不加載資源來克服問題的。我仍然會爲未來的讀者發佈答案]

您可以使用DynamicResource而不是StaticResource

這隻適用於如果您填充依賴項屬性,即Binding.Converter="{DynamicResource MyConverter}"將不起作用,因爲Binding.Converter不是依賴項屬性。