Table of Contents

Столбцы

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

Столбец в контроле TreeView

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

Столбцы в контроле TreeList

Столбцы TreeList инкапсулируются объектами TreeListColumn, которые являются потомками класса ColumnBase.

Контрол не создает автоматически столбцы после привязки контрола к источнику данных. Три подхода позволяют создавать столбцы:

  • Создайте все столбцы TreeList вручную в коллекции TreeList.Columns (в XAML или code-behind). При таком подходе у вас есть доступ к созданным объектам столбца по имени в коде.

  • Включите опцию TreeListControl.AutoGenerateColumns, чтобы автоматически генерировать отсутствующие столбцы после привязки контрола к источнику данных. Вы можете применить определенные атрибуты (из пространств имен System.ComponentModel и System.ComponentModel.DataAnnotations) к свойствам бизнес-объекта, чтобы управлять автоматической генерацией столбцов и настраивать свойства автоматически генерируемых столбцов (например, отображаемое имя столбца и порядок).

  • Комбинация двух описанных выше подходов: создайте необходимые столбцы вручную в коллекции TreeList.Columns, а затем включите опцию TreeListControl.AutoGenerateColumns, чтобы делегировать генерацию других столбцов в TreeList.

В следующем примере создаются два столбца TreeList и настраивается формат отображения значений второго столбца:

xmlns:mxtl="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList;assembly=Eremex.Avalonia.Controls"

<mxtl:TreeListControl Name="treeList1" >                
    <mxtl:TreeListControl.Columns>
        <mxtl:TreeListColumn Name="colName" FieldName="Name" />
        <mxtl:TreeListColumn Name="colBirthdate" FieldName="Birthdate" >
            <mxtl:TreeListColumn.EditorProperties>
                <mxe:TextEditorProperties DisplayFormatString="yyyy-MM-dd"/>
            </mxtl:TreeListColumn.EditorProperties>
        </mxtl:TreeListColumn>
    </mxtl:TreeListControl.Columns>
</mxtl:TreeListControl>

Смотрите Автоматическая генерация столбцов для получения информации об автоматически сгенерированных столбцах.

Привязка столбцов к данным

Свойство TreeListColumn.FieldName позволяет привязать столбец к полю в таблице нижележащих данных или к публичному свойству бизнес-объекта. Как только столбец привязан, он извлекает значения из источника данных.

TreeList также позволяет вам создавать несвязанные столбцы, значения которых следует вводить вручную, с помощью события TreeListControl.CustomUnboundColumnData. Смотрите Несвязанные столбцы для получения дополнительной информации.

Не рекомендуется привязывать несколько столбцов TreeList к одному и тому же полю данных/свойству.

В следующем примере создаются столбцы TreeList и привязываются к ним данные.

xmlns:mxtl="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList;assembly=Eremex.Avalonia.Controls"

<mxtl:TreeListControl Grid.Column="3" Width="200" 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>
using Eremex.AvaloniaUI.Controls.TreeList;

TreeListColumn colFirstName = new TreeListColumn() { FieldName = "FirstName", Header = "First Name", AllowSorting = false, Width= new GridLength(1, GridUnitType.Star) };
treeList1.Columns.Add(colFirstName);

Автоматическая генерация столбцов

Установите для свойства AutoGenerateColumns значение true (значение по умолчанию - false), чтобы включить автоматическую генерацию столбцов для свойств в источнике данных. Когда для AutoGenerateColumns установлено значение true, контрол TreeList извлекает публичные свойства из источника данных, генерирует столбцы и привязывает их к свойствам. Если коллекция Columns контрола уже содержит столбец, привязанный к определенному свойству/полю, автоматически не генерируется дополнительный столбец, привязанный к тому же свойству/полю.

События AutoGeneratingColumn и AutoGeneratedColumns позволяют настраивать автоматически сгенерированные столбцы. Событие AutoGeneratingColumn срабатывает, когда автоматически сгенерированный столбец собирается быть добавленным в коллекцию Columns. Событие позволяет вам предотвратить добавление столбца в коллекцию.

Событие AutoGeneratedColumns срабатывает после того, как все столбцы были автоматически сгенерированы.

Когда вы назначаете контролу другой источник данных, TreeList сначала удаляет столбцы, которые ранее были сгенерированы автоматически, а затем автоматически генерирует столбцы для нового источника данных.

Использование атрибутов для настройки свойств автоматически генерируемых столбцов

Вы можете применить определенные атрибуты (из пространств имен System.ComponentModel и System.ComponentModel.DataAnnotations) к свойствам бизнес-объекта (записи источника данных), чтобы настроить статус видимости, вид и свойства поведения для соответствующих автоматически сгенерированных столбцов TreeList. Поддерживаются следующие атрибуты:

Атрибут Browsable

Атрибут System.ComponentModel.BrowsableAttribute контролирует автоматическую генерацию столбца. Примените атрибут Browsable(false) к определенным свойствам, чтобы предотвратить автоматическое создание соответствующих столбцов.

using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;

public partial class MyBusinessObject : ObservableObject
{
    [ObservableProperty]
    [property: Browsable(false)]
    public int serviceId = "";
}

Атрибут System.ComponentModel.BrowsableAttribute эквивалентен использованию атрибута System.ComponentModel.DataAnnotations.DisplayAttribute с параметром AutoGenerateField.

Атрибут Display

System.ComponentModel.DataAnnotations.DisplayAttribute - это атрибут общего назначения, который контролирует автоматическую генерацию столбцов и свойства отображения автоматически сгенерированных столбцов. Атрибут имеет следующие параметры, поддерживаемые контролом TreeList:

  • AutoGenerateField — Указывает, следует ли автоматически генерировать соответствующий столбец.

  • Order — Указывает видимую позицию автоматически сгенерированного столбца (ColumnBase.VisibleIndex).

  • Name — Указывает заголовок автоматически сгенерированного столбца (ColumnBase.Header).

  • ShortName — эквивалент параметра Name.

using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel.DataAnnotations;

public partial class MyBusinessObject : ObservableObject
{
    [ObservableProperty]
    [Display(Name = "Birth date", Order=2)]
    public DateTime? birthdate = null;
}

Атрибут DisplayName

Атрибут System.ComponentModel.DisplayNameAttribute позволяет вам инициализировать заголовок автоматически сгенерированного столбца (ColumnBase.Header).

using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;

public partial class MyBusinessObject : ObservableObject
{
    [ObservableProperty]
    [property: DisplayName("Birth date")]
    public DateTime? birthdate = null;
}

Атрибут System.ComponentModel.DisplayNameAttribute эквивалентен использованию атрибута System.ComponentModel.DataAnnotations.DisplayAttribute с параметром Name или ShortName.

Атрибут Editable

Атрибут System.ComponentModel.EditableAttribute, примененный к свойству, создает недоступный для редактирования столбец. Пользователи не могут открывать встроенные редакторы и, таким образом, выделять и копировать текст.

using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;

public partial class MyBusinessObject : ObservableObject
{
    [ObservableProperty]
    [property: Editable(false)]
    public int parentId = -1;
}

Атрибут Readonly

Атрибут System.ComponentModel.ReadonlyAttribute, применяемый к свойству, создает столбец, доступный только для чтения. Пользователи могут выделять и копировать текст в столбцах, доступных только для чтения, но не редактировать значения.

using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;

public partial class MyBusinessObject : ObservableObject
{
    [ObservableProperty]
    [property: ReadOnly(true)]
    public int id = -1;
}

Перемещение столбцов

Используйте свойство TreeListColumn.VisibleIndex, чтобы указать визуальную позицию столбца. Чтобы скрыть столбец, установите для его свойства TreeListColumn.VisibleIndex значение -1 или установите для свойства IsVisible значение false.

Пользователь может переставлять столбцы по умолчанию. Следующие свойства позволяют запретить перемещение столбца:

  • TreeListControl.AllowColumnMoving — Указывает, может ли пользователь перемещать любой столбец.
  • TreeListColumn.AllowMoving — Указывает, может ли пользователь перемещать определенный столбец.

Изменение размера столбцов

Чтобы контролировать ширину столбца в TreeList, вы можете использовать следующие свойства:

  • TreeListColumn.Width — Ширина столбца, указанная как значение GridLength.
  • TreeListColumn.MinWidth — Минимальная ширина столбца.
  • TreeListColumn.MaxWidth — Максимальная ширина столбца.

Свойство Width относится к типу GridLength. Это позволяет вам установить ширину столбца равной:

  • Фиксированная ширина (количество пикселей).
  • Взвешенная доля доступного пространства (обозначение star).
  • Значение "Автоматически" — активирует автоматическое вычисление ширины столбца, подогнанное под заголовок столбца и видимые значения. Когда пользователь прокручивает контрол по вертикали, контрол может увеличить ширину столбца, подгоняя новые значения ячеек, появившиеся во время операции прокрутки.
xmlns:mxtl="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList;assembly=Eremex.Avalonia.Controls"

<mxtl:TreeListControl Name="treeList1">
    <mxtl:TreeListControl.Columns>
        <mxtl:TreeListColumn Name="colFirstName" FieldName="FirstName" Header="First Name" Width="*"/>
        <mxtl:TreeListColumn Name="colLastName" FieldName="LastName" Header="Last Name" Width="2*"/>
        <mxtl:TreeListColumn Name="colPhone" FieldName="Phone" Header="Phone" Width="*"/>
    </mxtl:TreeListControl.Columns>
</mxtl:TreeListControl>

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

  • TreeListControl.AllowColumnResizing — Указывает, может ли пользователь изменять размер любого столбца.
  • TreeListColumn.AllowResizing — Указывает, может ли пользователь изменять размер определенного столбца.

Заголовки столбцов

Заголовки столбцов TreeList отображаются на панели заголовков. Вы можете скрыть эту панель с помощью свойства TreeListControl.ShowColumnHeaders.

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

Заголовок столбца изначально отображает заголовок (текстовую метку), который является текстовым представлением свойства ColumnBase.Header. Если свойство ColumnBase.Header не задано, заголовок столбца генерируется из имени поля столбца (ColumnBase.FieldName).

Используйте свойство ColumnBase.HeaderContentTemplate, чтобы указать шаблон, используемый для отображения заголовка столбца. Шаблон позволяет отображать картинки и пользовательские контролы, а также отображать текст произвольным способом.

Следующий код отображает картинку перед заголовком столбца. Выражение <TextBlock Text="{Binding}"> отображает содержимое свойства Header столбца:

xmlns:mxtl="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList;assembly=Eremex.Avalonia.Controls"

<mxtl:TreeListControl Name="treeList" HeaderPanelMinHeight="50">
    <mxtl:TreeListColumn FieldName="Number" Header="Position" HeaderVerticalContentAlignment="Bottom">
        <mxtl:TreeListColumn.HeaderContentTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Image Source="/info24x24.png" Width="24" Height="24" Margin="0,0,5,0"></Image>
                    <TextBlock Text="{Binding}" VerticalAlignment="Center"/>
                </StackPanel>
            </DataTemplate>
        </mxtl:TreeListColumn.HeaderContentTemplate>
    </mxtl:TreeListColumn>
</mxtl:TreeListControl>

Используйте свойства ColumnBase.HeaderHorizontalContentAlignment и ColumnBase.HeaderVerticalContentAlignment, чтобы выровнять содержимое заголовка столбца по горизонтали и вертикали.

Сортировка столбцов

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

Значения в столбцах

Чтобы узнать, как извлекать значения ячеек для определенных узлов, смотрите Узлы .

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



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