
XAML-разметка древовидного представления:
Код источника:
Fragments = NestingTree.Values.ToList();
OnPropertyChanged(nameof(Fragments));
XML-файл:
ОБНОВЛЕНИЕ
NestingTree — это Dictionary, где ключи — это идентификаторы, а значения — это фрагменты.
UPDATE
NestingTree — это словарь , где ключи — это идентификаторы, а значения — это фрагменты.
UPDATE
NestingTree — это словарь , где ключи — это идентификаторы, а значения — это фрагменты.
UPDATE
NestingTree — это словарь , где ключи — это идентификаторы, а значения — это фрагменты.
UPDATE
p>
Код FragmentModel:
public class FragmentModel : INotifyPropertyChanged
{
public string fragmentId { get; set; }
private string fragmentName { get; set; }
public string FragmentName
{
get { return fragmentName; }
set
{
fragmentName = value;
OnPropertyChanged(nameof(FragmentName));
}
}
public FragmentModel ParentFragment { get; set; }
public List ChildFragments { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged?.Invoke(this, new
PropertyChangedEventArgs(propertyName));
}
}
}
Заполнение данных NestingTree из XML-файла:
XDocument xmlNestingTree = XDocument.Load("nesting_tree.xml");
if (xmlNestingTree.Element("NestingTree") is not null)
{
int count = 0;
foreach (XElement fragment in
xmlNestingTree.Element("NestingTree").Elements("fragment"))
{
string id = fragment.Attribute("id").Value;
FragmentModel f = new FragmentModel
{
fragmentId = id,
FragmentName = fragment.Attribute("name").Value,
};
nestingTree.Add(id, f);
}
foreach (XElement fragment in
xmlNestingTree.Element("NestingTree").Elements("fragment"))
{
FragmentModel currentFragment = nestingTree.Values.Where(f => f.fragmentId == fragment.Attribute("id").Value).FirstOrDefault();
FragmentModel parentFragment = nestingTree.Values.Where(f => f.ChildFragments.Contains(currentFragment)).FirstOrDefault();
currentFragment.ParentFragment = parentFragment;
if (Int32.TryParse(fragment.Element("childs").Attribute("count").Value, out count) && count > 0)
{
foreach (XElement child in fragment.Element("childs").Elements("child"))
{
FragmentModel currentChildFragment = nestingTree.Values.Where(f => f.fragmentId == child.Attribute("id").Value).FirstOrDefault();
currentFragment
.ChildFragments
.Add(currentChildFragment);
}
}
}
NestingTree = nestingTree;
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... f-elements