Skip to main content
A newer version of this page is available. .

Subtotal Class

A waterfall subtotal.

Namespace: DevExpress.Xpf.Charts

Assembly: DevExpress.Xpf.Charts.v20.1.dll

NuGet Packages: DevExpress.WindowsDesktop.Wpf.Charts, DevExpress.Wpf.Charts

Declaration

public class Subtotal :
    ChartDependencyObject,
    ISubtotal

Remarks

To add a subtotal to a waterfall chart, add a Subtotal object to the WaterfallValueOptionsBase.Subtotals collection. Specify the PointIndex to set the subtotal position. To change the subtotal’s axis label and crosshair text, define the Label property.

Example

This example shows how to create a waterfall chart.

Markup:

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WatefallChart"
        xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts" 
        x:Class="WatefallChart.MainWindow"
        mc:Ignorable="d"
        Title="MainWindow" Height="500" Width="800">
    <Grid>
        <dxc:ChartControl>
            <dxc:XYDiagram2D dxc:WaterfallSeries2D.TotalBarBrush="Gray"
                             dxc:WaterfallSeries2D.StartBarBrush="LightGray"
                             dxc:WaterfallSeries2D.SubtotalBarBrush="DarkGray"
                             dxc:WaterfallSeries2D.ConnectorBrush="Black">
                <dxc:WaterfallSeries2D.ValueOptions>
                    <dxc:WaterfallRelativeValueOptions StartBarValue="30" 
                                                       StartBarLabel="Start Value"
                                                       ShowTotal="True"
                                                       TotalLabel="Total">
                        <dxc:WaterfallRelativeValueOptions.Subtotals>
                            <dxc:Subtotal PointIndex="2" Label="Subtotal"/>
                        </dxc:WaterfallRelativeValueOptions.Subtotals>
                    </dxc:WaterfallRelativeValueOptions>
                </dxc:WaterfallSeries2D.ValueOptions>
                <dxc:WaterfallSeries2D DisplayName="Waterfall" 
                                       LabelsVisibility="True"
                                       DataSource="{Binding}"
                                       ArgumentScaleType="Qualitative"
                                       ArgumentDataMember="Argument"
                                       ValueDataMember="Value"
                                       RisingBarBrush="#FF92CEB5" 
                                       FallingBarBrush="#FFDA5859">
                    <dxc:WaterfallSeries2D.Model>
                        <dxc:BorderlessSimpleWaterfall2DModel/>
                    </dxc:WaterfallSeries2D.Model>
                </dxc:WaterfallSeries2D>
                <dxc:XYDiagram2D.AxisX>
                    <dxc:AxisX2D TickmarksMinorVisible="False"/>
                </dxc:XYDiagram2D.AxisX>
            </dxc:XYDiagram2D>
        </dxc:ChartControl>
    </Grid>
</Window>

Code-behind:

using System.Collections.Generic;
using System.Windows;

namespace WatefallChart {
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();
            this.DataContext = DataLoader.GetDataPoints();
        }
    }
    class DataLoader {
        public static List<DataPoint> GetDataPoints() {
            List<DataPoint> list = new List<DataPoint> {
                new DataPoint("November", 20),
                new DataPoint("December", 10),
                new DataPoint("January", -15),
                new DataPoint("February", 10),
                new DataPoint("March", -10)
            };
            return list;
        }
    }
    public class DataPoint {
        public string Argument { get; private set; }
        public double Value { get; private set; }
        public DataPoint(string arg, double val) {
            Argument = arg;
            Value = val;
        }
    }
}
See Also