Привязка к самореферентному источнику данных
Вы можете использовать самореферентный источник данных для кодирования иерархических связей между записями. Самореферентный источник данных - это плоский список или коллекция записей. Его записи имеют два служебных свойства, которые определяют отношения родитель-потомок:
- Key field — уникальный идентификатор записи (простого типа данных; например, Integer).
- Parent key field — Key field родительской записи.
На следующей картинке показан пример таблицы данных с самореферентными ссылками и контрола TreeList, который отображает эти данные после того, как свойства определенных свойств контрола установлены.
Все записи, которые будут отображаться как корневые узлы (на корневом уровне), должны иметь значение 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; }
}
Смотрите также
- Привязка данных
- Привязка к иерархическим данным
- Столбцы
- Как создать контрол TreeView и привязать его к самореферентному источнику данных
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.