Skip to content

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

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

  • 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="https://schemas.eremexcontrols.net/avalonia/treelist"
...
<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; }

}

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



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