Table of Contents

Привязка к самореферентному источнику данных

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

  • Key field — уникальный идентификатор записи (простого типа данных; например, Integer).
  • Parent key fieldKey field родительской записи.

На следующей картинке показан пример таблицы данных с самореферентными ссылками и контрола TreeList, который отображает эти данные после того, как свойства определенных свойств контрола установлены.

TreeList - Key and Parent Key fields

Все записи, которые будут отображаться как корневые узлы (на корневом уровне), должны иметь значение Parent key field, равное одному и тому же корневому значению. Корневое значение должно быть уникальным — оно не должно совпадать ни с одним ключевым полем в источнике данных.

Чтобы привязать контрол TreeList/TreeView к самореферентному источнику данных, выполните следующее:

  • Убедитесь, что записи источника данных имеют два публичных свойства, которые указывают ключевое поле и Parent key field.
  • Установите для свойства TreeListControlBase.KeyFieldName контрола значение "Имя ключевого поля".
  • Установите для свойства TreeListControlBase.ParentFieldName контрола значение Parent key field name.
  • Установите для свойства TreeListControlBase.RootValue контрола значение root, определенное для корневых записей в источнике данных.

Видимость служебных столбцов

TreeList по умолчанию не создает столбцы, привязанные к полям служебных ключей. Чтобы разрешить контролу автоматически создавать столбцы, привязанные к указанным Key field и Parent key field, установите для свойств AutoGenerateColumns и AutoGenerateServiceColumns значение true.

Пример

Следующий пример привязывает контрол TreeList к самореферентному источнику данных (коллекции записей Employee). Класс Employee определяет два свойства (ID и ParentID), которые определяют Key field и Parent key field записи соответственно. Для корневых записей Parent key field установлено значение -1, поэтому свойству RootValue контрола присвоено это значение.

xmlns:mxtl="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList;assembly=Eremex.Avalonia.Controls"
...
<mxtl:TreeListControl Grid.Column="0" Name="treeList2">                
    <mxtl:TreeListControl.Columns>
        <mxtl:TreeListColumn Name="colName1" FieldName="Name" />
        <mxtl:TreeListColumn Name="colBirthdate1" FieldName="Birthdate" >
            <mxtl:TreeListColumn.EditorProperties>
                <mxe:TextEditorProperties DisplayFormatString="yyyy-MM-dd"/>
            </mxtl:TreeListColumn.EditorProperties>
                        
        </mxtl:TreeListColumn>
    </mxtl:TreeListControl.Columns>
</mxtl:TreeListControl>
using CommunityToolkit.Mvvm.ComponentModel;

ObservableCollection<Employee> employees = new ObservableCollection<Employee>();
employees.Add(new Employee() { ID = 0, ParentID = -1, Name = "Serge Smolin", Birthdate = new DateTime(1990, 01, 5) });
employees.Add(new Employee() { ID = 1, ParentID = 0, Name = "Alex Douglas", Birthdate = new DateTime(1975, 8, 27) });
employees.Add(new Employee() { ID = 2, ParentID = 0, Name = "Dennis Parker", Birthdate = new DateTime(1985, 12, 17) });
employees.Add(new Employee() { ID = 3, ParentID = 1, Name = "Pavel Morris", Birthdate = new DateTime(1987, 10, 15) });
employees.Add(new Employee() { ID = 4, ParentID = 2, Name = "Mary Thompson", Birthdate = new DateTime(1991, 03, 16) });
employees.Add(new Employee() { ID = 5, ParentID = 3, Name = "Vera Liskina", Birthdate = new DateTime(1991, 04, 16) });

treeList2.KeyFieldName = "ID";
treeList2.ParentFieldName = "ParentID";
treeList2.RootValue = -1;

treeList2.ItemsSource = employees;


public partial class Employee : ObservableObject
{
    [ObservableProperty]
    public string name = "";

    [ObservableProperty]
    public DateTime? birthdate = null;

    public int ID { get; set; }

    public int ParentID { get; set; }

}

Смотрите также



* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.