首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过属性设置Treeview HierarchicalDataTemplate

通过属性设置Treeview HierarchicalDataTemplate
EN

Stack Overflow用户
提问于 2016-10-04 11:26:58
回答 1查看 260关注 0票数 2

这个有点复杂。我正在尝试创建一个具有treeview和一些其他控件的用户控件,以创建一个对其他实现有用的可重用控件。

我遇到的问题是,我无法弄清楚如何将在控件之外定义的HierarchicalDataTemplate插入到控件内的treeview中。

在这里的控件之外是我的WPF。

代码语言:javascript
复制
<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

代码语言:javascript
复制
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看起来是这样的。

代码语言:javascript
复制
<TreeView Name="ItemListView"
              Grid.Row="2"
              Margin="0,5,0,0"
              ItemsSource="{Binding Source={StaticResource ItemsCvs}}">

在treeview的其他实现中,我通常会以类似的方式执行HierarchicalDataTemplate。

代码语言:javascript
复制
<TreeView.Resources>
    <HierarchicalDataTemplate ItemsSource="{Binding Children}">
        <TextBlock Text="Hello"/>
    </HierarchicalDataTemplate>
</TreeView.Resources>

但是,由于HierarchicalDataTemplate位于依赖项属性中,因此我需要将其绑定到Treeview中。我已经浏览了一下互联网(并将继续这样做),但没有发现任何相关的东西。

如何将包含HierarchicalDataTemplate的依赖项属性注入treeview?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-04 12:19:13

以下应起作用:

  1. PropertyChangedCallback添加到HierarchicalDataTemplateProperty中。
  2. 在处理程序中,添加模板以控制资源: 私有静态void OnTemplateChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) { var This =d as MasterTreeUserControl;var template = e.NewValue as HierarchicalDataTemplate;if(template != null) { This.ItemListView.Resourcesnew DataTemplateKey(template.DataType) = template;}}

唯一的问题是您的HierarchicalDataTemplate必须将DataType设置为模板类型。你应该以某种方式(验证等)来执行这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39851075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档