Перейти к содержанию

Модификации таблицы-представления, получаемой в результате работы расширения типа "Таблица в представлении".

Модификации таблицы-представления, получаемой в результате работы расширения типа “Таблица в представлении”.

Данный элемент управления является наследником класса CardViewControlViewModel. Его тип: CardTableViewControlViewModel.

Рассмотрим возможные сценарии модификации данного элемента управления.

  • Модификация строк при создании.

Если требуется модифицировать строки таблицы при их создании, то необходимо добавить функцию в список CardViewControlViewModel.ModifyRowActions. Данную функцию необходимо задать на этапе инициализации карточки, так как если сделать это в ICardUIExtension.Initialized, то если контрол представления находится на выбранное вкладке, то первое обновление представления (создание строк) произойдет раньше выполнения ICardUIExtension.Initialized. Во время выполнения ICardUIExtension.Initializing контролы еще не созданы, поэтому используем ICardModel.ControlInitializers - список функций, которые выполняется для каждого контрола сразу после его создания. Используя ICardModel.ControlInitializers можно модифицировать контролы, которые отображаются в редакторе строки таблицы. Пример:

using System.Threading.Tasks; using System.Windows.Media; using Tessa.UI; using Tessa.UI.Cards; using Tessa.UI.Cards.Controls;

public sealed class ExampleUIExtension : CardUIExtension { public override async Task Initializing(ICardUIExtensionContext context) { var model = context.Model;

model.ControlInitializers.Add(async (control, m, r, ct) => { if (control is CardViewControlViewModel viewControl) { if (viewControl.Name == "Алиас контрола представления") { viewControl.ModifyRowActions.Add(row => { // Изменим цвет. row.Background = Brushes.Blue;

// Добавим тэг. // Имя колонки - ее порядок (в строковом формате) в редакторе колонок таблицы. // В данном примере тэг добавляется к первой строке представления. row.CellsByColumnName["0"].AddLeftTag( "Названия тэга, чтобы его в будущем можно было найти", new IconViewModel("Иконка, например, Thin42", row.MenuContext.Icons), visible: true, toolTip: "Строка с подсказкой"); }); } } }); } }

  • Модификация строк при их изменении.

Если требуется изменить строку таблицы при изменении строки основной секции или строки дочерней секций, от которой зависит строка таблицы, то следует подписаться на событие CardTableViewControlViewModel.RowChanged. Гарантируется, что EventHandler сработает в UI потоке. Пример:

using System; using System.Threading.Tasks; using System.Windows.Media; using Tessa.Platform.Storage; using Tessa.UI; using Tessa.UI.Cards; using Tessa.Extensions.Platform.Client.UI.TableViewExtension;

public sealed class ExampleUIExtension : CardUIExtension { public override async Task Initialized(ICardUIExtensionContext context) { if (!context.Model.Controls.TryGet("YourViewControlAlias", out var controlViewModel)) { throw new ArgumentException($"Control ViewModel with Name='{"YourViewControlAlias"}' not found."); } var tableControl = controlViewModel as CardTableViewControlViewModel; tableControl.RowChanged += OnRowChanged; }

private void OnRowChanged(object sender, TableViewRowChangedEventArgs e) { if(e.ChangeType == TableViewRowChangeType.RowChanged) { if(e.ChangedFieldName == "Какое-то поле" && e.CardRow.TryGet<bool?>(e.ChangedFieldName) == true) { e.Row.Background = Brushes.Red; } } } }

  • События, возникающие при добавлении, модификации или удалении строки, закрытии или валидации формы аналогичны событиям в GridViewModel (контрол Таблица).
Back to top