Xceed DataGrid for WPF v7.2 Documentation
Providing Unbound Data

The following example demonstrates how to use an unbound item property to display a calculated value. In this example, the total value of the units in stock.

XAML
Copy Code
<Grid xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid">
  <Grid.Resources>
     <xcdg:DataGridCollectionViewSource x:Key="cvs_products"
                                        Source="{Binding Source={x:Static Application.Current}, Path=Products}">
        <xcdg:DataGridCollectionViewSource.ItemProperties>
          <xcdg:DataGridUnboundItemProperty Name="TotalUnitsValue"
                                            DataType="{x:Type sys:Double}"
                                            QueryValue="DataGridUnboundItemProperty_QueryValue" />
        </xcdg:DataGridCollectionViewSource.ItemProperties>
     </xcdg:DataGridCollectionViewSource>
     <local:CurrencyConverter x:Key="currencyConverter" />
  </Grid.Resources>
  <xcdg:DataGridControl x:Name="OrdersGrid"
                        ItemsSource="{Binding Source={StaticResource cvs_products}}">
     <xcdg:DataGridControl.Columns>
        <xcdg:Column FieldName="TotalUnitsValue"
                     Title="Total Inventory">
           <xcdg:Column.CellContentTemplate>
              <DataTemplate>
                 <TextBlock Text="{Binding Converter={StaticResource currencyConverter}}" />
              </DataTemplate>
           </xcdg:Column.CellContentTemplate>
        </xcdg:Column>
        <xcdg:Column FieldName="Photo"
                     Visible="False" />           
     </xcdg:DataGridControl.Columns>
  </xcdg:DataGridControl>
</Grid>

The following code provides the implementation of the QueryValue event in which the unbound value will be calculated and returned.

VB.NET
Copy Code
Private Sub DataGridUnboundItemProperty_QueryValue( ByVal sender As Object, ByVal e As DataGridItemPropertyQueryValueEventArgs )
  Dim System.Data.DataRowView As row = TryCast( e.Item, System.Data.DataRowView )
  If Not row Is Nothing Then
    If( row( "UnitsInStock" ) <> DBNull.Value ) Then
      e.Value = CDouble( CInt( row( "UnitsInStock" ) ) * CDec( row( "UnitPrice" ) )
    End If
  End If
End Sub
C#
Copy Code
private void DataGridUnboundItemProperty_QueryValue( object sender, DataGridItemPropertyQueryValueEventArgs e )
{
 System.Data.DataRowView row = e.Item as System.Data.DataRowView;
 if( row != null )
 {
   if( row[ "UnitsInStock" ] != DBNull.Value )
   {
     e.Value = ( double )( ( short )row[ "UnitsInStock" ] * ( decimal )row[ "UnitPrice" ] );
   }
 }
}