Реализация вью-модели дерева с элементами различного типа для TreeView в MVVM
Считаю очень трудным реализовать Tree в MVVM, но худо бедно полазив по форумам смог реализовать часть:
MainWindowVM.cs
class MainWindowVM
{
public List<TreeVM> Trees { get; set; }
public MainWindowVM()
{
Trees = new List<TreeVM>()
{
new TreeVM("МОУО/ОУО")
};
}
}
TreeVM.cs
class TreeVM
{
public List<GovernmentVM> Governments { get; set; }
public string TreeName { get; set; }
public TreeVM(string treeName)
{
TreeName = treeName;
switch (TreeName)
{
case "МОУО/ОУО":
{
using (cokoEntities dataContext = new cokoEntities())
{
Governments = new List<GovernmentVM>();
var _govers = from o in dataContext.governments select o;
foreach (var gover in _govers)
{
Governments.Add(new GovernmentVM(gover));
}
}
break;
}
}
}
}
GovernmentVM.cs
class GovernmentVM
{
public government Gover { get; set; }
public GovernmentVM(government gover)
{
Gover = gover;
}
}
Иерархию установил таким образом:
<TreeView ItemsSource="{Binding Trees}">
<TreeView.Resources>
<HierarchicalDataTemplate ItemsSource="{Binding Governments}" DataType="{x:Type this:TreeVM}">
<Label Content="{Binding TreeName}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Schools}" DataType="{x:Type this:GovernmentVM}">
<Label Content="{Binding Gover.GoverName}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
В итоге получил пока все как хотел:
Т.е. как наверное поняли - в последнем слой дерева помещается объект government из базы данных.
Но теперь мне необходимо добавить в корень TreeView еще один объект, объект area другого типа из этой же базы данных.
Если начать с файла MainWindowVM, то будет следующее дополнение:
MainWindowVM.cs
class MainWindowVM
{
public List<TreeVM> Trees { get; set; }
public MainWindowVM()
{
Trees = new List<TreeVM>()
{
new TreeVM("МОУО/ОУО"),
new TreeVM("Районы") //новая ветка
};
}
}
Как дополнить проект?