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

Создаём карточку, в которую уже скопированы некоторые из данных текущей открытой карточки

Создаём карточку, в которую уже скопированы некоторые из данных текущей открытой карточки

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

Для расширения TileExtension понадобится получить в конструкторе объект IUIHost из Unity и сохранить его значение в поле класса:

using Tessa.Cards; using Tessa.UI; using Tessa.UI.Cards;

public CopyCardTileExtension(IUIHost uiHost) { this.uiHost = uiHost; }

private readonly IUIHost uiHost;

Далее в методе Execute команды нужно сделать следующее:

private void TileCommandAction(object parameter) { ITile tile = (ITile)parameter; // плитка, для которой была вызвана команда, передаётся в параметр ICardModel oldModel = tile.Context.CardEditor.CardModel;

this.uiHost.CreateCard( oldModel.CardType.ID, oldModel.CardType.Name, tile.Context, cardModifierAction: ctx => { Card oldCard = oldModel.Card; Card newCard = ctx.Card;

// здесь выполняем копирование нужных полей из oldCard в newCard // причём для строк в коллекционных секциях в newCard надо установить состояние // для каждой строки cardRow.State = CardRowState.Inserted и cardRow.RowID = Guid.NewGuid();

// например, копируем коллекционную секцию таким образом: CardSection oldSection = oldCard.Sections["SectionName"]; CardSection newSection = newCard.Sections["SectionName"]; newSection.Set(oldSection);

// если секция коллекционная: foreach (CardRow row in newSection.Rows) { row.State = CardRowState.Inserted; row.RowID = Guid.NewGuid(); } }); }

Back to top