Skip to main content

ISeriesLabelTextProvider Interface

An interface that should be implemented by a class that defines custom labels for a series (the SeriesBase class descendant object).

Namespace: DevExpress.XamarinForms.Charts

Assembly: DevExpress.XamarinForms.Charts.dll

NuGet Package: DevExpress.XamarinForms.Charts

Declaration

public interface ISeriesLabelTextProvider

The following members return ISeriesLabelTextProvider objects:

Remarks

Implement the ISeriesLabelTextProvider interface and its GetText method if you need series labels to display custom text strings based on the underlying data point values.

The GetText method receives an argument of a type specific to a series:

Series Type

GetText Argument Type

Pie and Donut

PieSeriesLabelValues

Area, Bar, Line, Spline, Point, and Bubble

SeriesLabelValues

Candlestick and Stock

FinancialSeriesLabelValues

Range Area or Range Bar

RangeSeriesLabelValues

Example

This example shows how to configure the pie series so that its labels display point values as thousands, millions or billions of dollars in the following way:

  • 1234 -> $1.234K
  • 123456789 -> $123.457M
  • 12345678901 -> $12.346B

PieSeriesLabelValues

View Example

  1. Create a class (LabelTextProvider) that implements the ISeriesLabelTextProvider interface.
  2. Implement the GetText method that returns a string for each label instance. A PieSeriesLabelValues object is an argument of this method when it is called for a pie series. Use the PieSeriesLabelValues.Value property to access series point values.
  3. Assign a LabelTextProvider object to the PieSeriesLabel.TextProvider property.
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:dxc="http://schemas.devexpress.com/xamarin/2014/forms/charts"
             x:Class="SeriesLabelTextProviderExample.MainPage">
    <dxc:PieChartView x:Name="chart" />
</ContentPage>
using System;
using Xamarin.Forms;
using System.Globalization;
using System.Collections.Generic;
using DevExpress.XamarinForms.Charts;

namespace SeriesLabelTextProviderExample {
    public partial class MainPage : ContentPage {
        public MainPage() {
            DevExpress.XamarinForms.Charts.Initializer.Init();
            InitializeComponent();

            PieChartView pieChart = chart;

            PieSeries pieSeries = new PieSeries() {
                Data = new PieSeriesDataAdapter() {
                    LabelDataMember = "Label",
                    ValueDataMember = "Value",
                    DataSource = new List<DataItem>() {
                        new DataItem() { Label = "AAA", Value = 1230000 },
                        new DataItem() { Label = "BBB", Value = 3330000 },
                        new DataItem() { Label = "CCC", Value = 2100000 },
                    }
                },
                Label = new PieSeriesLabel() {
                    Position = PieSeriesLabelPosition.Inside,
                    TextProvider = new LabelTextProvider(),
                    Style = new PieSeriesLabelStyle(){
                        TextStyle = new TextStyle(){
                            Size = 18
                        }
                    }
                }
            };
            pieChart.Series.Add(pieSeries);
        }
    }

    public class LabelTextProvider : ISeriesLabelTextProvider {
        string ISeriesLabelTextProvider.GetText(SeriesLabelValuesBase values) {
            if (values is PieSeriesLabelValues seriesValues) {
                double v = seriesValues.Value;
                if (v >= 1000000000 || v <= -1000000000)
                    return (v / 1000000000.0).ToString("$#.###B", CultureInfo.InvariantCulture);
                else if (v >= 1000000 || v <= -1000000)
                    return (v / 1000000.0).ToString("$#.###M", CultureInfo.InvariantCulture);
                else if (v >= 1000 || v <= -1000)
                    return (v / 1000.0).ToString("$#.###K", CultureInfo.InvariantCulture);
                else
                    return v.ToString();
            }
            return String.Empty;
        }
    }

    public class DataItem {
        public string Label { get; set; }
        public double Value { get; set; }
    }
}
See Also