通过属性设置Treeview HierarchicalDataTemplate

时间:2016-10-04 11:26:58

标签: c# wpf user-controls treeview dependency-properties

这个有点复杂。我正在尝试创建一个具有树视图和一些其他控件的usercontrol,以创建一个可用于其他实现的可重用控件。

我遇到的问题是我无法弄清楚如何将控件外部定义的HierarchicalDataTemplate插入到控件内的树视图中。

控制之外是我的WPF

<Grid>
    <Grid.Resources>
        <HierarchicalDataTemplate x:Key="HierarchicalDataTemplate" ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Path=Name}"/>
        </HierarchicalDataTemplate>
    </Grid.Resources>

    <masterTreeUserControl:MasterTreeUserControl 
        HierarchicalDataTemplate="{StaticResource HierarchicalDataTemplate}"
        ItemsSource="{Binding Path=SelectiveListViewModel.Items, UpdateSourceTrigger=PropertyChanged}"
        SelectedItem="{Binding Path=SelectiveListViewModel.SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
        EnableAdd="False"
        ItemType="{x:Type viewmodels:LocationItem}"
        />
</Grid>

MasterTreeUserControl有一个HierarchicalDataTemplate DependencyProperty

HierarchicalDataTemplateProperty = DependencyProperty.Register("HierarchicalDataTemplate",typeof(HierarchicalDataTemplate),typeof(MasterTreeUserControl));


private static readonly DependencyProperty HierarchicalDataTemplateProperty;
    public HierarchicalDataTemplate HierarchicalDataTemplate
    {
        get
        {
            return (HierarchicalDataTemplate)GetValue(HierarchicalDataTemplateProperty);
        }
        set
        {
            SetValue(HierarchicalDataTemplateProperty, value);
        }
    }

到目前为止,控件内的Treeview看起来像这样。

<TreeView Name="ItemListView"
              Grid.Row="2"
              Margin="0,5,0,0"
              ItemsSource="{Binding Source={StaticResource ItemsCvs}}">

在树视图的其他实现中,我通常会以类似于此的方式执行HierarchicalDataTemplate。

<TreeView.Resources>
    <HierarchicalDataTemplate ItemsSource="{Binding Children}">
        <TextBlock Text="Hello"/>
    </HierarchicalDataTemplate>
</TreeView.Resources>

但是,由于HierarchicalDataTemplate位于依赖项属性中,因此我需要以某种方式将其绑定到Treeview中。我已经看过互联网(并将继续这样做),但不能发现任何相关内容。

如何将包含HierarchicalDataTemplate的依赖项属性注入树视图?

1 个答案:

答案 0 :(得分:1)

以下应该工作:

  1. \042添加到您的"
  2. 在处理程序中,添加模板以控制资源:

    PropertyChangedCallback
  3. 唯一的问题是,您的HierarchicalDataTemplateProperty必须将private static void OnTemplateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var This = d as MasterTreeUserControl; var template = e.NewValue as HierarchicalDataTemplate; if(template != null) { This.ItemListView.Resources[new DataTemplateKey(template.DataType)] = template; } } 设置为模板类型。你应该以某种方式强制执行(验证等)。