Контрол Ссылка с источником автодополнения на клиенте
Контрол Ссылка с источником автодополнения на клиенте¶
В контроле Ссылка можно получать автодополнение без выполнения запроса на сервер, задав данные для автодополнения на клиенте. Для этого необходимо подменить представления, которые являются источником данных для автодополнения, на программные. В пространстве имен Tessa.UI.Controls.Helpers
доступно универсальное программное представление NamedRecordsView<T>
, которое позволяет использовать в качестве источника данных IEnumerable<T>
. Для использования достаточно задать функции для преобразования T в строку представления и имя, по которому будет производиться фильтрация.
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Tessa.UI.Cards;
using Tessa.UI.Cards.Controls.AutoComplete;
using Tessa.UI.Controls.Helpers;
public sealed class AutoCompleteItem
{
public AutoCompleteItem(Guid iD, string name)
{
this.ID = iD;
this.Name = name;
}
public Guid ID { get; }
public string Name { get; }
}
public sealed class ExampleUIExtension : CardUIExtension
{
public override async Task Initializing(ICardUIExtensionContext context)
{
var model = context.Model;
// источник данных для автодополнения
var autoCompleteSource = new List<AutoCompleteItem>()
{
new AutoCompleteItem(new Guid(), "Item1"),
new AutoCompleteItem(new Guid(), "Item2")
};
model.ControlInitializers.Add(async (control, m, r, ct) =>
{
if (control is AutoCompleteEntryViewModel autoComplete)
{
if (autoComplete.Name == "Алиас контрола Ссылка")
{
// создаем представление
var tableTypesView = new NamedRecordsView<AutoCompleteItem>(
"RefSection",
autoCompleteSource,
x => new object[] {x.ID, x.Name },
x => x.Name,
enableSorting: true
);
// подменяем представления на программные
autoComplete.View = tableTypesView;
autoComplete.ViewComboBox = tableTypesView;
}
}
});
}
}