# How to: Bind the Grid to a Collection of Conditional Formatting Rules | WPF Controls | DevExpress Documentation

This topic describes how to define [conditional formatting rules](/WPF/17130/controls-and-libraries/data-grid/conditional-formatting) in a View Model and apply them to the [GridControl](/WPF/DevExpress.Xpf.Grid.GridControl).

[View Example: How to Bind the GridControl to Conditional Formatting Rules Specified in a ViewModel](https://github.com/DevExpress-Examples/wpf-data-grid-generate-conditional-formatting-rules-from-viewmodel-collection)

## Apply Conditional Formatting Rules specified in a ViewModel to the GridControl

This example creates a conditional formatting rule that highlights rows.

![DevExpress WPF | Grid Control - MVVM Conditional Formatting](/WPF/images/Grid_MVVM_Highlight_Row_CFRule.png)

### Specify Format Conditions in the ViewModel

1. Create an enumeration that lists comparison rules you want to use in conditional formatting rules:

- C#
    - VB.NET

<section id="tabpanel_Ajf0CvTJCV_tabid-csharp" role="tabpanel" data-tab="tabid-csharp">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-csharp">public enum ConditionRule { Less, Greater }
</code></pre></section>
<section id="tabpanel_Ajf0CvTJCV_tabid-vb" role="tabpanel" data-tab="tabid-vb" aria-hidden="true" hidden="hidden">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-vb">Public Enum ConditionRule
    Less
    Greater
End Enum
</code></pre></section>
2. Create a class that describes a conditional formatting rule:

- C#
    - VB.NET

<section id="tabpanel_Ajf0CvTJCV-1_tabid-csharp" role="tabpanel" data-tab="tabid-csharp">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-csharp">public class FormattingRule : BindableBase {
    public FormattingRule(string fieldname, ConditionRule valuerule, int value, bool applytorow) {
        FieldName = fieldname;
        ValueRule = valuerule;
        Value = value;
        ApplyToRow = applytorow;
    }
    public string FieldName { get; }
    public ConditionRule ValueRule { get; }
    public int Value { get; }
    public bool ApplyToRow { get; }
}
</code></pre></section>
<section id="tabpanel_Ajf0CvTJCV-1_tabid-vb" role="tabpanel" data-tab="tabid-vb" aria-hidden="true" hidden="hidden">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-vb">Public Class FormattingRule
    Inherits BindableBase

    Public Sub New(ByVal fieldname As String, ByVal valuerule As ConditionRule, ByVal value As Integer, ByVal applytorow As Boolean)
        FieldName = fieldname
        ValueRule = valuerule
        Value = value
        ApplyToRow = applytorow
    End Sub

    Public ReadOnly Property FieldName As String
    Public ReadOnly Property ValueRule As ConditionRule
    Public ReadOnly Property Value As Integer
    Public ReadOnly Property ApplyToRow As Boolean
End Class
</code></pre></section>
3. Specify a collection of conditional formatting rules in the ViewModel:

- C#
    - VB.NET

<section id="tabpanel_Ajf0CvTJCV-2_tabid-csharp" role="tabpanel" data-tab="tabid-csharp">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-csharp">public class ViewModel : ViewModelBase {
    public ViewModel() {
        // ...
        Rules = new ObservableCollection&lt;FormattingRule&gt;() {
            new FormattingRule(&quot;Total&quot;, ConditionRule.Less, 0, true)
        };
    }
    // ...
    public ObservableCollection&lt;FormattingRule&gt; Rules { get; }
}
</code></pre></section>
<section id="tabpanel_Ajf0CvTJCV-2_tabid-vb" role="tabpanel" data-tab="tabid-vb" aria-hidden="true" hidden="hidden">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-vb">Public Class ViewModel
    Inherits ViewModelBase

    Public Sub New()
        &#39; ...
        Rules = New ObservableCollection(Of FormattingRule)() From {
            New FormattingRule(&quot;Total&quot;, ConditionRule.Less, 0, True)
        }
    End Sub

    &#39; ...
    Public ReadOnly Property Rules As ObservableCollection(Of FormattingRule)
End Class
</code></pre></section>

     If you want the [GridControl](/WPF/DevExpress.Xpf.Grid.GridControl) to reflect changes made in the **Rules** collection, this collection should implement the [INotifyCollectionChanged](https://docs.microsoft.com/en-us/dotnet/api/system.collections.specialized.inotifycollectionchanged) interface.

### Create a Format Condition Template

1. To specify a rule’s comparison operator, set the [FormatCondition.ValueRule](/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule) property to a [ConditionRule](/WPF/DevExpress.Xpf.Core.ConditionalFormatting.ConditionRule) enumeration value. Create an [ObjectToObjectConverter](/WPF/17361/mvvm-framework/converters#objecttoobjectconverter) to map your **ConditionRule** enumeration values to the [ConditionRule](/WPF/DevExpress.Xpf.Core.ConditionalFormatting.ConditionRule) enumeration values:

- XAML

<section id="tabpanel_Ajf0CvTJCV-3_tabid-xaml" role="tabpanel" data-tab="tabid-xaml">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-xaml">&lt;Window ...
    xmlns:dxmvvm=&quot;http://schemas.devexpress.com/winfx/2008/xaml/mvvm&quot;&gt;
    &lt;Window.Resources&gt;
        &lt;dxmvvm:ObjectToObjectConverter x:Key=&quot;FormatRuleConverter&quot;&gt;
            &lt;dxmvvm:MapItem Source=&quot;Less&quot; Target=&quot;Less&quot;/&gt;
            &lt;dxmvvm:MapItem Source=&quot;Greater&quot; Target=&quot;Greater&quot;/&gt;
        &lt;/dxmvvm:ObjectToObjectConverter&gt;
    &lt;/Window.Resources&gt;
</code></pre></section>
2. Create a template that generates conditional formatting rules.

     Use the **FormatRuleConverter** to specify the **Converter** parameter for the [FormatCondition.ValueRule](/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule) property.

     Use the **DependencyObjectExtensions.DataContext** attached property when you bind the [GridControl](/WPF/DevExpress.Xpf.Grid.GridControl) to conditional formatting properties. This attached property synchronizes data updates of bound properties to enhance grid performance:

- XAML

<section id="tabpanel_Ajf0CvTJCV-4_tabid-xaml" role="tabpanel" data-tab="tabid-xaml">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-xaml">&lt;Window.Resources&gt;
    &lt;DataTemplate x:Key=&quot;BackgroundTemplate&quot;&gt;
        &lt;ContentControl&gt;
            &lt;dxg:FormatCondition 
                FieldName=&quot;{Binding Path=(dxci:DependencyObjectExtensions.DataContext).FieldName, RelativeSource={RelativeSource Self}}&quot;
                ValueRule=&quot;{Binding Path=(dxci:DependencyObjectExtensions.DataContext).ValueRule, RelativeSource={RelativeSource Self}, Converter={StaticResource FormatRuleConverter}}&quot;
                Value1=&quot;{Binding Path=(dxci:DependencyObjectExtensions.DataContext).Value, RelativeSource={RelativeSource Self}}&quot;
                ApplyToRow=&quot;{Binding Path=(dxci:DependencyObjectExtensions.DataContext).ApplyToRow, RelativeSource={RelativeSource Self}}&quot;
                PredefinedFormatName=&quot;LightRedFill&quot;/&gt;
        &lt;/ContentControl&gt;
    &lt;/DataTemplate&gt;
&lt;/Window.Resources&gt;
</code></pre></section>

### Apply Format Conditions to the GridControl

1. Assign the conditional formatting rule collection to the [TableView.FormatConditionsSource](/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource) property.
2. Set the [TableView.FormatConditionGeneratorTemplate](/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate) property to a template that generates conditional formatting rules.

- XAML

<section id="tabpanel_Ajf0CvTJCV-5_tabid-xaml" role="tabpanel" data-tab="tabid-xaml">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-xaml">&lt;dxg:GridControl ItemsSource=&quot;{Binding Orders}&quot;&gt;
    &lt;!-- ... --&gt;
    &lt;dxg:GridControl.View&gt;
        &lt;dxg:TableView FormatConditionsSource=&quot;{Binding Rules}&quot;
                       FormatConditionGeneratorTemplate=&quot;{StaticResource BackgroundFormat}&quot;/&gt;
    &lt;/dxg:GridControl.View&gt;
&lt;/dxg:GridControl&gt;
</code></pre></section>

## Add Multiple Conditional Formatting Rules

If you want to specify extra format conditions, follow the steps below. This example demonstrates how to add format conditions that change a cell’s font and display an image in this cell.

![DevExpress WPF | Grid Control - MVVM Multiple Format Conditions](/WPF/images/wpf_grid_mvvm_conditionalformatting126727.png)

1. Specify an enumeration that lists format condition types:

- C#
    - VB.NET

<section id="tabpanel_Ajf0CvTJCV-6_tabid-csharp" role="tabpanel" data-tab="tabid-csharp">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-csharp">public enum FormattingType { Background, Font, Icon }
</code></pre></section>
<section id="tabpanel_Ajf0CvTJCV-6_tabid-vb" role="tabpanel" data-tab="tabid-vb" aria-hidden="true" hidden="hidden">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-vb">Public Enum FormattingType
    Background
    Font
    Icon
End Enum
</code></pre></section>
2. Add a property that returns a format condition type to the **Rule** class:

- C#
    - VB.NET

<section id="tabpanel_Ajf0CvTJCV-7_tabid-csharp" role="tabpanel" data-tab="tabid-csharp">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" data-highlight-lines="[[13]]" class="lang-csharp">public class FormattingRule : BindableBase {
    public FormattingRule(string fieldname, ConditionRule valuerule, int value, bool applytorow, FormattingType type) {
        FieldName = fieldname;
        ValueRule = valuerule;
        Value = value;
        ApplyToRow = applytorow;
        Type = type;
    }
    public string FieldName { get; }
    public ConditionRule ValueRule { get; }
    public int Value { get; }
    public bool ApplyToRow { get; }
    public FormattingType Type { get; }
}
</code></pre></section>
<section id="tabpanel_Ajf0CvTJCV-7_tabid-vb" role="tabpanel" data-tab="tabid-vb" aria-hidden="true" hidden="hidden">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" data-highlight-lines="[[16]]" class="lang-vb">Public Class FormattingRule
    Inherits BindableBase

    Public Sub New(ByVal fieldname As String, ByVal valuerule As ConditionRule, ByVal value As Integer, ByVal applytorow As Boolean, ByVal type As FormattingType)
        FieldName = fieldname
        ValueRule = valuerule
        Value = value
        ApplyToRow = applytorow
        Type = type
    End Sub

    Public ReadOnly Property FieldName As String
    Public ReadOnly Property ValueRule As ConditionRule
    Public ReadOnly Property Value As Integer
    Public ReadOnly Property ApplyToRow As Boolean
    Public ReadOnly Property Type As FormattingType
End Class
</code></pre></section>
3. Add conditional formatting rules to the **Rules** collection:

- C#
    - VB.NET

<section id="tabpanel_Ajf0CvTJCV-8_tabid-csharp" role="tabpanel" data-tab="tabid-csharp">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" data-highlight-lines="[[6],[7]]" class="lang-csharp">public class ViewModel : ViewModelBase {
    public ViewModel() {
        // ...
        Rules = new ObservableCollection&lt;FormattingRule&gt;() {
            new FormattingRule(&quot;Total&quot;, ConditionRule.Less, 0, true, FormattingType.Background),
            new FormattingRule( nameof(Order.Discount), ConditionRule.Greater, 0, false, FormattingType.Font),
            new FormattingRule( nameof(Order.Discount), ConditionRule.Greater, 0, false, FormattingType.Icon)
        };
    }
    // ...
    public ObservableCollection&lt;FormattingRule&gt; Rules { get; }
}
</code></pre></section>
<section id="tabpanel_Ajf0CvTJCV-8_tabid-vb" role="tabpanel" data-tab="tabid-vb" aria-hidden="true" hidden="hidden">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" data-highlight-lines="[[8],[9]]" class="lang-vb">Public Class ViewModel
    Inherits ViewModelBase

    Public Sub New()
        &#39; ...
        Rules = New ObservableCollection(Of FormattingRule)() From {
            New FormattingRule(&quot;Total&quot;, ConditionRule.Less, 0, True, FormattingType.Background),
            New FormattingRule(NameOf(Order.Discount), ConditionRule.Greater, 0, False, FormattingType.Font),
            New FormattingRule(NameOf(Order.Discount), ConditionRule.Greater, 0, False, FormattingType.Icon)
        }
    End Sub

    &#39; ...
    Public ReadOnly Property Rules As ObservableCollection(Of FormattingRule)
End Class
</code></pre></section>
4. Create templates that generate conditional formatting rules:

- XAML

<section id="tabpanel_Ajf0CvTJCV-9_tabid-xaml" role="tabpanel" data-tab="tabid-xaml">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-xaml">&lt;Window ...
    xmlns:dxci=&quot;http://schemas.devexpress.com/winfx/2008/xaml/core/internal&quot;
    xmlns:dx=&quot;http://schemas.devexpress.com/winfx/2008/xaml/core&quot;&gt;
    &lt;Window.Resources&gt;
        &lt;!-- ... --&gt;
        &lt;DataTemplate x:Key=&quot;FontTemplate&quot;&gt;
            &lt;ContentControl&gt;
                &lt;dxg:FormatCondition 
                    FieldName=&quot;{Binding Path=(dxci:DependencyObjectExtensions.DataContext).FieldName, RelativeSource={RelativeSource Self}}&quot;
                    ValueRule=&quot;{Binding Path=(dxci:DependencyObjectExtensions.DataContext).ValueRule, RelativeSource={RelativeSource Self}, Converter={StaticResource FormatRuleConverter}}&quot;
                    Value1=&quot;{Binding Path=(dxci:DependencyObjectExtensions.DataContext).Value, RelativeSource={RelativeSource Self}}&quot;
                    ApplyToRow=&quot;{Binding Path=(dxci:DependencyObjectExtensions.DataContext).ApplyToRow, RelativeSource={RelativeSource Self}}&quot;
                    PredefinedFormatName=&quot;BoldText&quot;/&gt;
            &lt;/ContentControl&gt;
        &lt;/DataTemplate&gt;

        &lt;DataTemplate x:Key=&quot;IconTemplate&quot;&gt;
            &lt;ContentControl&gt;
                &lt;dxg:FormatCondition 
                    FieldName=&quot;{Binding Path=(dxci:DependencyObjectExtensions.DataContext).FieldName, RelativeSource={RelativeSource Self}}&quot;
                    ValueRule=&quot;{Binding Path=(dxci:DependencyObjectExtensions.DataContext).ValueRule, RelativeSource={RelativeSource Self}, Converter={StaticResource FormatRuleConverter}}&quot;
                    Value1=&quot;{Binding Path=(dxci:DependencyObjectExtensions.DataContext).Value, RelativeSource={RelativeSource Self}}&quot;
                    ApplyToRow=&quot;{Binding Path=(dxci:DependencyObjectExtensions.DataContext).ApplyToRow, RelativeSource={RelativeSource Self}}&quot;&gt;
                    &lt;dxg:FormatCondition.Format&gt;
                        &lt;dx:Format Icon=&quot;{dx:IconSet Name=Stars3_1}&quot;/&gt;
                    &lt;/dxg:FormatCondition.Format&gt;
                &lt;/dxg:FormatCondition&gt;
            &lt;/ContentControl&gt;
        &lt;/DataTemplate&gt;
    &lt;/Window.Resources&gt;
</code></pre></section>

## Add a Template Selector to Choose among Multiple Templates

Your application now contains the **BackgroundTemplate**, **FontTemplate**, and **IconTemplate**. To choose a template based on the format condition type, create a template selector and assign it to the [TableView.FormatConditionGeneratorTemplateSelector](/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector) property:

- C#
- VB.NET

<section id="tabpanel_Ajf0CvTJCV-10_tabid-csharp" role="tabpanel" data-tab="tabid-csharp">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-csharp">public class FormatConditionSelector : DataTemplateSelector {

    public DataTemplate BackgroundTemplate { get; set; }
    public DataTemplate FontTemplate { get; set; }
    public DataTemplate IconTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container) {
        FormattingRule rule = item as FormattingRule;
        if(rule == null) return null;
        switch(rule.Type) {
            case FormattingType.Font:
                return FontTemplate;
            case FormattingType.Background:
                return BackgroundTemplate;
            case FormattingType.Icon:
                return IconTemplate;
        }
        return null;
    }
}
</code></pre></section>
<section id="tabpanel_Ajf0CvTJCV-10_tabid-vb" role="tabpanel" data-tab="tabid-vb" aria-hidden="true" hidden="hidden">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-vb">Public Class FormatConditionSelector
    Inherits DataTemplateSelector

    Public Property BackgroundTemplate As DataTemplate
    Public Property FontTemplate As DataTemplate
    Public Property IconTemplate As DataTemplate

    Public Overrides Function SelectTemplate(ByVal item As Object, ByVal container As DependencyObject) As DataTemplate
        Dim rule As FormattingRule = TryCast(item, FormattingRule)
        If rule Is Nothing Then Return Nothing

        Select Case rule.Type
            Case FormattingType.Font
                Return FontTemplate
            Case FormattingType.Background
                Return BackgroundTemplate
            Case FormattingType.Icon
                Return IconTemplate
        End Select

        Return Nothing
    End Function
End Class
</code></pre></section>

- XAML

<section id="tabpanel_Ajf0CvTJCV-11_tabid-xaml" role="tabpanel" data-tab="tabid-xaml">
<pre><code data-code-links="{&quot;BindableBase&quot;:&quot;/WPF/17350/mvvm-framework/viewmodels/bindablebase&quot;,&quot;ViewModelBase&quot;:&quot;/WPF/17351/mvvm-framework/viewmodels/viewmodelbase&quot;,&quot;FormatConditionGeneratorTemplateSelector&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplateSelector&quot;,&quot;FormatConditionsSource&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionsSource&quot;,&quot;FormatConditionGeneratorTemplate&quot;:&quot;/WPF/DevExpress.Xpf.Grid.TableView.FormatConditionGeneratorTemplate&quot;,&quot;FormatCondition&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition&quot;,&quot;/(FieldName)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.FieldName&quot;,&quot;/(ValueRule)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.ValueRule&quot;,&quot;Value1&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatCondition.Value1&quot;,&quot;/(ApplyToRow)[^ ,]/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.ApplyToRow&quot;,&quot;PredefinedFormatName&quot;:&quot;/WPF/DevExpress.Xpf.Grid.FormatConditionBase.PredefinedFormatName&quot;,&quot;/\\.(Format)/&quot;:&quot;/WPF/DevExpress.Xpf.Grid.ExpressionConditionBase.Format&quot;}" class="lang-xaml">&lt;Window.Resources&gt;
    &lt;!-- ... --&gt;
    &lt;local:FormatConditionSelector x:Key=&quot;FormatConditionSelector&quot; 
                                   BackgroundTemplate=&quot;{StaticResource BackgroundTemplate}&quot; 
                                   FontTemplate=&quot;{StaticResource FontTemplate}&quot; 
                                   IconTemplate=&quot;{StaticResource IconTemplate}&quot;/&gt;
&lt;/Window.Resources&gt;
&lt;dxg:GridControl ItemsSource=&quot;{Binding Orders}&quot;&gt;
    &lt;!-- ... --&gt;
    &lt;dxg:GridControl.View&gt;
        &lt;dxg:TableView FormatConditionsSource=&quot;{Binding Rules}&quot;
                       FormatConditionGeneratorTemplateSelector=&quot;{StaticResource FormatConditionSelector}&quot;/&gt;
    &lt;/dxg:GridControl.View&gt;
&lt;/dxg:GridControl&gt;
</code></pre></section>

See Also

[Conditional Formatting](/WPF/17130/controls-and-libraries/data-grid/conditional-formatting)

[Bind to Collections Specified in the ViewModel](/WPF/403274/controls-and-libraries/data-grid/mvvm-enhancements/bind-to-collections-specified-in-the-viewmodel)