ColumnBase.Binding Property
Gets or sets the binding that associates the column with a property in the data source.
Namespace: DevExpress.Xpf.Grid
Assembly: DevExpress.Xpf.Grid.v24.2.Core.dll
NuGet Package: DevExpress.Wpf.Grid.Core
Declaration
Property Value
Type | Default | Description |
---|---|---|
BindingBase | null | The data binding for the column. |
Remarks
Use the Binding property to bind columns to data source properties. The data source should implement INotifyPropertyChanged to notify the grid control that a property value has changed.
Set the binding’s Mode property to TwoWay to enable editing.
Note
When you use a custom CellTemplate, follow the recommendations below to automatically bind cell values to the property specified by Binding
:
- If the template contains a BaseEdit class descendant, use the solution from the following topic: Custom In-Place Cell Editors.
- If the template does not include a BaseEdit class descendant, use the following paths to bind it to data: Data Binding.
Columns with the specified Binding property work as unbound columns and obtain a field type from the first item. You can use the ColumnBase.UnboundDataType property to specify the field type:
<dxg:GridColumn Binding="{Binding Value, Mode=TwoWay}" UnboundDataType="{x:Type sys:Object}">
The Binding
property uses the RowData object as a data context. As a result, the following binding paths are equal:
<dxg:GridColumn FieldName="ProductName1" Binding="{Binding ProductName, Mode=TwoWay}"/>
<dxg:GridColumn FieldName="ProductName2" Binding="{Binding RowData.Row.ProductName, Mode=TwoWay}"/>
Limitations
The following limitations apply when you use the Binding property:
- The sort and filter operations are slower compared to the FieldName technique because a column obtains its cell values using the standard binding mechanism.
- Columns are unbound columns, and all limitations related to unbound columns apply to them (see Server Mode Limitations and Binding to ICollectionView).
To use the RelativeSource or Source binding, create a ColumnBase.CellTemplate for this column and define the binding within the template.
Refer to the following topic for more information: Binding Columns to Data Source Fields.
Tip
When working with data structures that contain Dynamic Objects, use the Binding property instead of ColumnBase.FieldName.
When you use the Binding property, the ColumnBase.FieldName property should not contain an existing property name.
Note
Setting the Binding.UpdateSourceTrigger property for the binding passed to the Binding property has no effect. Use the DataViewBase.EnableImmediatePosting to control how the cell values are actually posted.
How the GridControl Identifies Columns
The GridControl identifies columns by their ColumnBase.FieldName values. When you use the Binding property to bind a column to a data field, the GridControl initializes the ColumnBase.FieldName property with a value based on the specified binding expression. If you have multiple columns with the same binding path, set their FieldName to unique values to enable the GridControl to distinguish between columns:
<dxg:GridColumn Binding="{Binding Id, Converter={StaticResource converter1}}" FieldName="c1"/>
<dxg:GridColumn Binding="{Binding Id, Converter={StaticResource converter2}}" FieldName="c2"/>
Example
<dxg:GridControl x:Name="grid">
<dxg:GridControl.Columns>
<dxg:GridColumn Header="Id" FieldName="col1" Binding="{Binding Path=Id, Mode=TwoWay}"/>
<dxg:GridColumn Header="First Name" FieldName="col2" Binding="{Binding Path=FirstName, Mode=TwoWay}"/>
<dxg:GridColumn Header="Last Name" FieldName="col3" Binding="{Binding Path=LastName, Mode=TwoWay}"/>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView Name="view"/>
</dxg:GridControl.View>
</dxg:GridControl>
Related GitHub Examples
The following code snippet (auto-collected from DevExpress Examples) contains a reference to the Binding property.
Note
The algorithm used to collect these code examples remains a work in progress. Accordingly, the links and snippets below may produce inaccurate results. If you encounter an issue with code examples below, please use the feedback form on this page to report the issue.