0

DataTemplateSelector で HierarchicalDataTemplate を使用したいのですが、順序に問題があります。

<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 に設定されているため、TemplateA に TemplateSelector を設定する必要はありません。時にはそれはとても単純なことかもしれません...

4

1 に答える 1

3

[リソースをロードしないことで問題を解決したようです。将来の読者のために回答を投稿します]

DynamicResourceの代わりに使用できますStaticResource

これは、依存関係プロパティを設定する場合にのみ機能します。つまり、依存関係プロパティではないBinding.Converter="{DynamicResource MyConverter}"ため機能しBinding.Converterません。

于 2013-09-29T08:04:21.173 に答える