Back to Devexpress

ISeriesLabelTextProvider Interface

mobilecontrols-devexpress-dot-xamarinforms-dot-charts-b7b3886d.md

latest6.6 KB
Original Source

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

csharp
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

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.
xml
<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>
csharp
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

ISeriesLabelTextProvider Members

DevExpress.XamarinForms.Charts Namespace