Конвертация значения элемента управления
Программист может внедрить в механизм получения значения элемента управления функцию конвертации, которая требуемым образом подготовит данные для использования в клиентском компоненте элемента управления.
-
Указать в описателе свойства
Bindingназвание функции конвертации:-
в текстовом описателе — в атрибуте
BindingConverter:<Property Type="Binding" BindingConverter="SuperConverter" /> -
в бинарном описателе — в методе
GetBindingLoader:var bindingProperty = PropertyFactory.GetBindingProperty(); bindingProperty.GetBindingLoader = (() => new SimpleBindingLoader { ConverterType = "SuperConverter" });
-
-
Добавить класс конвертер в серверное расширение.
Класс конвертера является производным от
BaseBindingConverter, в котором переопределяется методConvertForDisplay. Данный метод должен привести значение элемента управления к требуемому виду.Следующий код демонстрирует пример класса конвертера, в котором значение элемента управления преобразуется с использованием функции
ConvertForDisplay.internal class SuperConverter : BaseBindingConverter { public SuperConverter(IServiceProvider serviceProvider) (1) : base(serviceProvider, "SuperConverter") { } public override BindingResult ConvertForDisplay(ControlContext controlContext, Binding binding, BindingResult bindingResult) (2) { var data = SuperMethod(bindingResult.Value); (3) return bindingResult.Clone(data); (4) } }1 В конструктор базового класса должно быть передано название конвертера, которое указано данных свойства. 2 Метод ConvertForDisplayдолжен возвращать преобразованные данные свойства ЭУ для использования в клиентском расширении ЭУ.3 Здесь метод SuperMethodтребуемым образом преобразует текущее переданное значение ЭУ —bindingResult.Value.4 Метод Cloneсоздаёт копиюbindingResult, в полеValueкоторой записывается преобразованное значение изdata.Конвертер вызывается автоматически при загрузке значения элемента управления, при условии совпадения названия конвертера в описателе и в расширении.
-
Конвертер нужно добавить в IoC-контейнер в ядре серверного расширения:
public override void InitializeContainer(ContainerBuilder containerBuilder) { containerBuilder.RegisterOrderedType<SuperConverter, IBindingConverter>(); }Расширение должно быть опубликовано на сервере Web-клиента.