In This Topic
    Providing Unbound Data
    In This Topic

    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" ] );
       }
     }
    }