У меня есть несколько объектов, которые я хотел бы отобразить с помощью 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
.
Проблема в том, что я не могу понять это правильно - мои TreeView.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>
Что я делаю не так?