Похоже, вы выбираете маршрут, который сложнее, чем вам действительно нужно.Вот основной способ достижения того, что вы пытаетесь достичь.
Добавьте это к вашему XML:
<TreeView ItemsSource="{Binding TopLevelElements}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Elements}">
<Grid>
<!-- Bind display information for any given Element's xDocument or whatever you want -->
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
Затем создайте некоторый класс Element, который имеет ObservableCollection of Elements (создаем рекурсивную структуру, которую мы хотим в древовидном представлении):
public class Element
{
public ObservableCollection<Element> Elements = new ObservableCollection<Element>();
public Element(string filename)
{
StreamReader reader = new StreamReader(locationtreeFile, Encoding.UTF8);
XDocument doc = XDocument.Load(reader);
Elements = LoadUnits(doc.Descendants("componentRef"));
}
}
Наконец, определите некоторую ObservableCollection элемента верхнего уровня для вашего древовидного представления, чтобы изначально связать с:
public ObservableCollection<Element> TopLevelElements = new ObservableCollection<Element>();
public MainWindow()
{
TopLevelElements.Add(new Element("filename"));
DataContext = this;
InitializeComponent();
}
Как вы можетесм. в части XML, HierarchicalDataTemplate ItemsSource для элементов.Так как каждый элемент имеет ObservableCollection of Elements, он будет вытягивать древовидную структуру в соответствии с этой структурой объекта.Вы можете ссылаться на свойства Element в структуре XML HierarchicalDataTemplate.