C# WPF рекурсивная повторяющаяся вложенная иерархия элементовC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# WPF рекурсивная повторяющаяся вложенная иерархия элементов

Сообщение Anonymous »

Я создал древовидное представление с динамически заполненной иерархией файлов XML, и у меня возникла проблема. В вложенной иерархии древовидного представления был рекурсивный дубликат и получен такой результат:
Изображение

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»