Skip to main content
All docs
V24.2

DevExpress v24.2 Update — Your Feedback Matters

Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

ValueFactoryExtension Class

Allows you to create unshared instances of objects in styles. The extension creates these instances for each element that uses the style.

Namespace: DevExpress.Mvvm.UI

Assembly: DevExpress.Xpf.Core.v24.2.dll

NuGet Package: DevExpress.Wpf.Core

#Declaration

public class ValueFactoryExtension :
    MarkupExtension

#Remarks

Code samples in this topic contain two GridControls. Their View property is defined in the gridStyle resource.

If you create a TreeListView instance in a style without the ValueFactoryExtension, WPF does the following:

  1. Creates the TreeListView instance for the first GridControl.
  2. Creates the TreeListView instance for the second GridControl and deletes the instance created for the first GridControl.
  3. The first GridControl‘s View property is null. As a result, the GridControl displays its default view (TableView).

Define a View Without the ValueFactoryExtension

<Window.Resources>
    <Style TargetType="dxg:GridControl" x:Key="gridStyle">
        <Setter Property="ItemsSource" Value="{Binding Persons}"/>
        <Setter Property="AutoGenerateColumns" Value="AddNew"/>
        <Setter Property="EnableSmartColumnsGeneration" Value="True"/>
        <Setter Property="View">
            <Setter.Value>
                <dxg:TreeListView KeyFieldName="ID" ParentFieldName="ParentID" 
                                  AutoWidth="True" AutoExpandAllNodes="True"/>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <dxg:GridControl Style="{StaticResource gridStyle}"/>
    <dxg:GridControl Style="{StaticResource gridStyle}" Grid.Row="1"/>
</Grid>

The ValueFactoryExtension creates object instances for all elements that use the style:

Use the ValueFactoryExtension to Define a View

<Window.Resources>
    <Style TargetType="dxg:GridControl" x:Key="gridStyle">
        <Setter Property="ItemsSource" Value="{Binding Persons}"/>
        <Setter Property="AutoGenerateColumns" Value="AddNew"/>
        <Setter Property="EnableSmartColumnsGeneration" Value="True"/>
        <Setter Property="View">
            <Setter.Value>
                <dxmvvm:ValueFactory>
                    <DataTemplate>
                        <dxg:TreeListView KeyFieldName="ID" ParentFieldName="ParentID" 
                                          AutoWidth="True" AutoExpandAllNodes="True"/>
                    </DataTemplate>
                </dxmvvm:ValueFactory>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <dxg:GridControl Style="{StaticResource gridStyle}"/>
    <dxg:GridControl Style="{StaticResource gridStyle}" Grid.Row="1"/>
</Grid>

#Inheritance

Object
MarkupExtension
ValueFactoryExtension
See Also