我有一些我想用TreeView
. 我使用的类是这样定义的:
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<T>
,并使用HierarchicalDataTemplate
. 问题是,我似乎无法正确 - myTreeView.Items.Count
总是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>
我究竟做错了什么?