0

我有一个TreeView

<TreeView Grid.Row="0" Grid.Column="2" ItemsSource="{Binding ResourceInstanceRootItems}" SelectedItemChanged="TreeView_SelectedItemChanged_2">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <HierarchicalDataTemplate.ItemTemplateSelector>
                <local:ResourceInstDataTemplateSelector/>
            </HierarchicalDataTemplate.ItemTemplateSelector>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
 </TreeView>

和数据模板选择器:

public class ResourceInstDataTemplateSelector : DataTemplateSelector
{
    public override DataTemplate
        SelectTemplate(object item, DependencyObject container)
    {
        FrameworkElement element = container as FrameworkElement;

        if (element != null && item != null && item is ResourceInstance)
        {
            ResourceInstance ri = item as ResourceInstance;
            DataTemplate temp = null;
            if (ri.Parent == null)
                temp = App.Current.Resources["parent_item"] as DataTemplate;
            else if (ri.DependingInstance == null)
                temp = App.Current.Resources["simple_instance"] as DataTemplate;
            else
                temp = App.Current.Resources["dependent_instance"] as DataTemplate;

            return temp;
        }

        return null;
    }
}

问题是,ResourceInstDataTemplateSelector.SelectTemplate不会调用 中的根项目,TreeView它们仅显示为空箭头。

4

1 回答 1

0

我相信您应该直接在 TreeView 上设置选择器,而不是在具有选择器的 TreeView 上放置 ItemTemplate,例如

<TreeView Grid.Row="0" Grid.Column="2" ItemsSource="{Binding ResourceInstanceRootItems}">
    <TreeView.ItemTemplateSelector>
        <local:ResourceInstDataTemplateSelector/>
    </TreeView.ItemTemplateSelector>
</TreeView>
于 2012-07-17T06:39:46.847 回答