---
title: Dual binder registration
summary: Registers a binder whose displayed value and validated value come from different object/property pairs.
status: draft
owner: SAIF documentation team
last_reviewed: 2026-08-17
library: SAIF.Presentation.Web.Binding.Infragistics103
reference_type: embedded
operation_id: OP-BIND-006
trigger: Page code needing a control whose displayed/bound value differs from its validation source/property
---

# Dual binder registration

This operation registers a binder that displays/binds a control's value against one object/property pair while validating against a separate object/property pair, for a fixed set of supported control kinds.

| Field | Value |
| --- | --- |
| **Operation ID** | OP-BIND-006 |
| **Trigger** | Page code calling `clsObjectBindManager.AddDualBinder(control, controlType, bindObject, bindProperty, validationObject, validationProperty, [args], [bindType])` |
| **Inputs** | Control instance; `CustomBindingControls` enum selecting binder type; bind object/property; validation object/property; optional type-specific args |
| **Outputs** | The appropriate binder instance configured for dual binding, appended via `AddBinder()` |
| **Primary components** | `clsObjectBindManager.AddDualBinder`, `clsObjectBinderBase.SetDualBinding` |
| **Entry point** | `SAIF.Presentation.Web.Binding.Infragistics103\clsObjectBindManager.vb` |

## Steps

1. `Select Case` on `inControlType` (`CustomBindingControls`) constructs one of: `clsDDLBinder`, `clsTextBoxBinder`, `clsWebTextEditBinder`, `clsSAIFWebMaskEditBinder` (optionally seeded from `SAIFMaskEditBindingArgs`), `clsWebDateTimeEditBinder` (optionally applying `WebDateTimeEditBindingArgs.IsTargetString`), or `clsWebMaskEditBinder` (optionally applying `WebMaskEditBindingArgs.TargetObejctDataType`).
2. Set `FormControl`, `BindType`, then call `SetDualBinding(bindObject, bindProperty, validationObject, validationProperty)` — sets `m_DualBinding = True` and stores both source/property pairs.
3. Call `AddBinder()` (same registration logic as the standard `Add()` family — see [Register and initialize a control binding](register-control-binding.md)).

## Process flow

The following diagram visualizes this operation's control flow.

```mermaid
flowchart TD
	Start([AddDualBinder called]) --> SelectType{CustomBindingControls value}
	SelectType -->|DropDownList| DDL[Construct clsDDLBinder]
	SelectType -->|TextBox| TB[Construct clsTextBoxBinder]
	SelectType -->|WebTextEdit| WTE[Construct clsWebTextEditBinder]
	SelectType -->|SAIFWebMaskEdit| SME[Construct clsSAIFWebMaskEditBinder]
	SelectType -->|WebDateTimeEdit| WDTE[Construct clsWebDateTimeEditBinder]
	SelectType -->|WebMaskEdit| WME[Construct clsWebMaskEditBinder]
	DDL --> SetFC[Set FormControl, BindType]
	TB --> SetFC
	WTE --> SetFC
	SME --> SetFC
	WDTE --> SetFC
	WME --> SetFC
	SetFC --> Dual[SetDualBinding: store bind and validation pairs]
	Dual --> AddBinder[AddBinder: register in m_Bindings]
	AddBinder --> EndOk([Dual binder registered])
```

## Failure and edge-case behavior
- Only the control kinds enumerated in `CustomBindingControls` are supported; other control types are not reachable through this operation.*

## Related documentation
- [Operations and processes](../operations-processes.md)
- [Business rules](../business-rules.md)

## Sources
- `SAIF.Presentation.Web.Binding.Infragistics103\clsObjectBindManager.vb`
- `SAIF.Presentation.Web.Binding.Infragistics103\Enums.vb`
