我想将HierarchicalDataTemplate与DataTemplateSelector一起使用但是我遇到了顺序问题:
<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中有没有一种前瞻性声明的方法,还是有不同的解决方案?
解决方案: 我找到了解决方案:我不需要在TemplateA中设置TemplateSelector,因为它是在父DataTemplate中设置的。有时它可以这么简单......
答案 0 :(得分:3)
[似乎你通过不加载资源克服了这个问题。我仍然会为未来的读者发布答案]
您可以使用DynamicResource
代替StaticResource
。
这仅适用于填充依赖项属性,即Binding.Converter="{DynamicResource MyConverter}"
不起作用,因为Binding.Converter
不是依赖项属性。