Skip to main content
All docs
V25.1
  • Subtotal Class

    A waterfall subtotal.

    Namespace: DevExpress.Xpf.Charts

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

    NuGet Package: 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.

    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:WaterfallChart"
            xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts" 
            x:Class="WaterfallChart.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 WaterfallChart {
        /// <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