0

我想将 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 中设置的。有时它可以如此简单......

4

1 回答 1

3

[看来您通过不加载资源克服了这个问题。我仍然会为未来的读者发布答案]

您可以使用DynamicResource而不是StaticResource.

这仅在您填充依赖属性时才有效,即Binding.Converter="{DynamicResource MyConverter}"由于不是依赖属性,因此将不起作用Binding.Converter

于 2013-09-29T08:04:21.173 回答