WPF HierarchicalDataTemplate树状 [英] WPF HierarchicalDataTemplate treeview

查看:183
本文介绍了WPF HierarchicalDataTemplate树状的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些对象,我想显示使用 TreeView控件
我用的是类这样定义的:

I have some objects I would like to display using a TreeView. The classes I use are defined like this:

public abstract class QueryPart
{
    private static Random _random;
    protected static Random Random { get { return _random??(_random=new Random(654)); } }
    public string Name { get; set; }
    public QueryPart()
    {
        this.Name = this.GetType().Name + " " + Random.Next();
    }       
}

public abstract class Criterium : QueryPart
{        
    object ParamValue { get; set; }
    protected Criterium()
    {
        ParamValue = Random.Next();
    }
}

public sealed class Criterium<T> : QueryPart
{             
}

public abstract class CriteriumGroup : QueryPart
{
    public ObservableCollection<QueryPart> Childeren { get; private set; }
    public CriteriumGroup()
    {
        Childeren = new ObservableCollection<QueryPart>();
    }
}

public sealed class CriteriumGroup<T> : CriteriumGroup
{        
}

public static class Helper
{
    public static CriteriumGroup<T> GetDefaultCriteriumGroup<T>()
    {
        var master = new CriteriumGroup<T>();
        master.Childeren.Add(new Criterium<T>());
        var sub = new CriteriumGroup<T>()
        {
            Childeren =
                {
                    new Criterium<T>(),
                    new Criterium<T>(),
                    new Criterium<T>(),
                    new CriteriumGroup<T>() 
                    {
                        Childeren =
                        {
                            new Criterium<T>(), 
                            new Criterium<T>(), 
                            new Criterium<T>()
                        }
                    },
                    new Criterium<T>()
                }
        };
        master.Childeren.Add(sub);
        sub = new CriteriumGroup<T>()
        {
            Childeren =
                {
                    new Criterium<T>(),
                    new CriteriumGroup<T>() 
                    {
                        Childeren =
                        {
                            new Criterium<T>(), 
                            new Criterium<T>(), 
                            new Criterium<T>()
                        }
                    },
                }
        };
        master.Childeren.Add(sub);
        return master;
    }
}

我在 TreeView控件绑定到 CriteriumGroup&LT的实例; T&GT; ,并使用 HierarchicalDataTemplate
问题是,我似乎无法得到它的权利 - 我的 TreeView.Items.Count 总是 0

I would bind the TreeView to an instance of CriteriumGroup<T>, and use a HierarchicalDataTemplate. The problem is, I can't seem to get it right - my TreeView.Items.Count is always 0.

这是我迄今为止:

<TreeView x:Name="treeview" ItemsSource="{Binding Path=RootCriteriumGroup}">
        <TreeView.Resources>
            <DataTemplate DataType="{x:Type DynamicLinq:QueryPart}">
                <local:QueryPartModelView2/>
            </DataTemplate>

            <HierarchicalDataTemplate DataType="{x:Type DynamicLinq:Criterium}" ItemsSource={Binding Path=Childeren}>
                <local:QueryPartModelView2/>
            </HierarchicalDataTemplate>

            <HierarchicalDataTemplate 
                              DataType="{x:Type DynamicLinq:CriteriumGroup}" 
                              ItemsSource="{Binding Path=Childeren}">
                <local:QueryPartModelView2/>
            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>

我在做什么错了?

What am I doing wrong?

任何帮助/意见将是AP preciated。

Any help/comments will be appreciated.

推荐答案

采取的方法是这样工作的:

Taking an approach like this works:

<TreeView Name="treeView1" ItemsSource="{Binding MyEnumerableProperty}" >
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}" >
            <StackPanel Orientation="Horizontal">
                <Image Source="{Binding MyImageUri}"  />
                <TextBlock x:Name="someName" Text="{Binding MyNodeText}" />
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

这是一个简单的方式开始,一旦你有工作,那么你可以看看周围移动的东西,并让他们在资源部分样式和模板。

This is a simple way to start, once you have it working you can then look to move things around and have them as Styles and Templates in Resource sections.

这篇关于WPF HierarchicalDataTemplate树状的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆