rob.evans Ответов: 2

Заполнение WPF Treeview рекурсивно из базы данных в шаблоне MVVM


Я использовал статью Джоша Смита "упрощение WPF TreeView с помощью шаблона ViewModel", чтобы адаптировать его технику к приложению типа WPF, MVVM, Prism, Unity. Он отлично работает, когда я использую его образец "жестко закодированного" источника данных, предоставленного в его загрузке под названием "TreeVeiwWithViewModelDemo", но я не знаю, как изменить код, чтобы рекурсивно добавить данные в объект Person из базы данных SQL Server. Я надеюсь, что кто-то уже сделал это и может подтолкнуть меня в правильном направлении.

Код Джоша выглядит следующим образом:
public static Person GetFamilyTree()
{
    // In a real app this method would access a database.
    return new Person
    {
        Name = "David Weatherbeam",
        Children =
        {
            new Person
            {
                Name="Alberto Weatherbeam",
                Children=
                { etc...


Мне нужно изменить это, чтобы получить доступ к базе данных и вернуть список лиц, который определяется следующим образом:
public class Person
{
    readonly List<Person> _children = new List<Person>();
    public IList<Person> Children
    {
        get { return _children; }
    }

    public string Name { get; set; }
}


... и шаблон элемента WPF выглядит следующим образом:
<TreeView.ItemTemplate>
  <HierarchicalDataTemplate ItemsSource="{Binding Children}">
    <TextBlock Text="{Binding Name}" />
  </HierarchicalDataTemplate>
</TreeView.ItemTemplate>

2 Ответов

Рейтинг:
2

Kenneth Haugland

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

UniquePersonID  PersonNAme              Level              Parent
1               David Weatherbeam       0                  Nothing/Null
2               Alberto Weatherbeam     1                  1

и т.д..

Теперь вы можете легко восстановить все данные, необходимые для установления соединений.

Так что удачи вам :)


rob.evans

Хммм. Если бы это было не так сложно (только для меня, может быть), то я бы не задавал этого вопроса. У меня уже есть люди в иерархической базе данных. Я надеялся получить ответ с каким-нибудь реальным кодом с рекурсией.

Рейтинг:
1

Erik Rude

Вы, вероятно, следует взглянуть на ObservableCollections и элементов collectionviewsource.
Я посмотрю, что смогу найти по этому вопросу, что может вам помочь, но пока поищите себя.
Попробуйте взглянуть на то, что сделал этот парень.
Настройка TreeView-Часть 1[^]

Удачи :)


Graeme_Grant

Почему вы отвечаете на вопрос 5-летней давности, который уже принял ответ? Пожалуйста, не делайте этого, вместо этого сосредоточьтесь только на текущем вопросе - всегда есть много ожидающих помощи.

Erik Rude

Извини, что я не обратил внимания на дату. Я смотрел только на вопросы без ответов, затем изменил фильтрацию и не заметил существующих ответов. Если это не ответ на ваш вопрос, я сожалею, что так сильно расстроил вас. Во всяком случае, я не вижу приемлемого ответа. Надеюсь, ваш день улучшится :)