Table of Contents

Режим без привязки к данным

Контролы TreeList и TreeView поддерживают несвязанный режим, в котором вы можете вручную создать иерархию узлов.

Не инициализируйте свойство ItemSource контрола. В противном случае контрол переключается в режим привязки и, таким образом, запрещает вам добавлять узлы вручную.

Используйте свойство TreeListControlBase.Nodes, чтобы добавить корневые узлы к контролу. Для каждого узла вы можете использовать свойство TreeListNode.Nodes для добавления дочерних узлов.

Узел в контролах TreeList и TreeView инкапсулируется объектом TreeListNode. Его свойство TreeListNode.Content позволяет вам указать содержимое узла. Вы можете присвоить свойству TreeListNode.Content значение бизнес-объекта, публичные свойства которого предоставляют данные для столбцов контрола. Для контрола TreeView вы можете присвоить свойству TreeListNode.Content значение String object.

Если вы используете контрол TreeList, убедитесь, что коллекция TreeListControl.Columns контрола содержит столбцы, привязанные к определенным именам полей.

Следующий код XAML создает иерархическую структуру узлов в коллекции TreeListControl.Nodes. Свойство Content каждого узла инициализируется объектом Person, определенным в коде позади.

xmlns:mxtl="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList;assembly=Eremex.Avalonia.Controls"
xmlns:local="clr-namespace:AvaloniaApplication1"
...
<mxtl:TreeListControl Grid.Column="3" Width="800" Name="treeListUnbound" HorizontalAlignment="Stretch">
    <mxtl:TreeListControl.Columns>
        <mxtl:TreeListColumn Name="colFirstName" FieldName="FirstName" Header="First Name" Width="*"  AllowSorting="False"  />
        <mxtl:TreeListColumn Name="colLastName" FieldName="LastName" Header="Last Name" Width="*"/>
        <mxtl:TreeListColumn Name="colCity" FieldName="City" Header="City" Width="*" ReadOnly="True" />
        <mxtl:TreeListColumn Name="colPhone" FieldName="Phone" Header="Phone" Width="*"/>
    </mxtl:TreeListControl.Columns>

    <mxtl:TreeListControl.Nodes>
        <mxtl:TreeListNode>
            <mxtl:TreeListNode.Content>
                <local:Person FirstName="Roman" LastName="Suponin" City="Saint Petersburg" Phone="(7)724-347-47"/>
            </mxtl:TreeListNode.Content>
            <mxtl:TreeListNode.Nodes>
                <mxtl:TreeListNode >
                    <mxtl:TreeListNode.Content>
                        <local:Person FirstName="Ivan" LastName="Kovalev" City="Moscow" Phone="(7)111-90-73"/>
                    </mxtl:TreeListNode.Content>
                    <mxtl:TreeListNode.Nodes>
                        <mxtl:TreeListNode>
                            <mxtl:TreeListNode.Content>
                                <local:Person FirstName="Artin" LastName="Tusk" City="Aksaray" Phone="(4)123-14-56"/>
                            </mxtl:TreeListNode.Content>
                        </mxtl:TreeListNode>
                        <mxtl:TreeListNode>
                            <mxtl:TreeListNode.Content>
                                <local:Person FirstName="George" LastName="Botkin" City="Hua Hin" Phone="(61)457-198-34"/>
                            </mxtl:TreeListNode.Content>
                            <mxtl:TreeListNode.Nodes>
                                <mxtl:TreeListNode>
                                    <mxtl:TreeListNode.Content>
                                        <local:Person FirstName="Lee" LastName="Wan" City="Shanghai" Phone="(56)335-57-89"/>
                                    </mxtl:TreeListNode.Content>
                                </mxtl:TreeListNode>
                            </mxtl:TreeListNode.Nodes>
                        </mxtl:TreeListNode>
                    </mxtl:TreeListNode.Nodes>
                </mxtl:TreeListNode>
            </mxtl:TreeListNode.Nodes>
        </mxtl:TreeListNode>
    </mxtl:TreeListControl.Nodes>
</mxtl:TreeListControl>
public partial class Person : ObservableObject
{
    public Person() { }
    public Person(string firstName, string lastName, string city, string phone)
    {
        this.firstName = firstName;
        this.lastName = lastName;
        this.city = city;
        this.phone = phone;
    }

    [ObservableProperty]
    string firstName;
    [ObservableProperty]
    string lastName;
    [ObservableProperty]
    string city;
    [ObservableProperty]
    string phone;
}

Следующий пример создает структуру узла в коде позади. Он добавляет объект node1 на корневой уровень TreeList. Другие узлы добавляются на вложенных уровнях.

TreeListNode node1 = new TreeListNode() { Content = new Person("Kim", "Magnus", "Doha", "(5)433-07-12") };
TreeListNode node11 = new TreeListNode() { Content = new Person("Patricia", "Rooney", "Cairo", "(5)450-39-49") };
TreeListNode node111 = new TreeListNode() { Content = new Person("Victor", "Boev", "Sarajevo", "(98)328-23-54") };
TreeListNode node12 = new TreeListNode() { Content = new Person("Vincent", "Novak", "Belgrad", "(476)487-598-465") };
treeListUnbound.Nodes.Add(node1);
node1.Nodes.Add(node11);
node11.Nodes.Add(node111);
node1.Nodes.Add(node12);

Особенности TreeView

Вы можете присвоить свойству Content узла TreeView значение бизнес-объекта или простой строки.

Следующий код показывает, как заполнить узлы TreeView простыми строками.

<mxtl:TreeViewControl Grid.Column="5" Width="400" Name="treeViewUnbound2">
    <mxtl:TreeViewControl.Nodes>
        <mxtl:TreeListNode Content="Russia">
            <mxtl:TreeListNode.Nodes>
                <mxtl:TreeListNode Content="Tula oblast">
                    <mxtl:TreeListNode.Nodes>
                        <mxtl:TreeListNode Content="Tula"/>
                        <mxtl:TreeListNode Content="Aleksin">
                            <mxtl:TreeListNode.Nodes>
                                <mxtl:TreeListNode Content="Pavlovo"/>
                                <mxtl:TreeListNode Content="Kolosovo"/>
                                <mxtl:TreeListNode Content="Shutilovo"/>
                            </mxtl:TreeListNode.Nodes>
                        </mxtl:TreeListNode>
                        <mxtl:TreeListNode Content="Belyov"/>
                        <mxtl:TreeListNode Content="Suvorov"/>
                    </mxtl:TreeListNode.Nodes>
                </mxtl:TreeListNode>
            </mxtl:TreeListNode.Nodes>
                    
        </mxtl:TreeListNode>
    </mxtl:TreeViewControl.Nodes>
</mxtl:TreeViewControl>

Если вы назначаете бизнес-объект свойству Content, присвойте элементу TreeViewControl.DataFieldName имя свойства бизнес-объекта, которое предоставляет отображаемые значения для контрола, как показано в примере ниже.

TreeListNode node1 = new TreeListNode() { Content = new Person("Kim", "Magnus", "Doha", "(5)433-07-12") };
TreeListNode node11 = new TreeListNode() { Content = new Person("Patricia", "Rooney", "Cairo", "(5)450-39-49") };
TreeListNode node111 = new TreeListNode() { Content = new Person("Victor", "Boev", "Sarajevo", "(98)328-23-54") };
TreeListNode node12 = new TreeListNode() { Content = new Person("Vincent", "Novak", "Belgrad", "(476)487-598-465") };

treeViewUnbound1.DataFieldName = "LastName";
treeViewUnbound1.Nodes.Add(node1);
node1.Nodes.Add(node11);
node11.Nodes.Add(node111);
node1.Nodes.Add(node12);


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