Thread ID: |
Created: |
Updated: |
Platform: |
Replies: |
148117 | Oct 7,2019 07:19 AM UTC | Oct 15,2019 07:06 AM UTC | Xamarin.Forms | 6 |
![]() |
Tags: SfChart |
<chart:PieSeries ItemsSource="{Binding Data}" XBindingPath="XValue" YBindingPath="YValue" GroupMode="Value" GroupTo="60">
<chart:PieSeries.DataMarker>
<chart:ChartDataMarker>
<chart:ChartDataMarker.LabelTemplate>
<DataTemplate>
<StackLayout Orientation="Vertical">
<Label FontSize="12" TextColor="White" HorizontalOptions="CenterAndExpand" Text="{Binding Converter={StaticResource converter}, ConverterParameter='Label'}"/>
<Label FontSize="12" TextColor="White" HorizontalOptions="CenterAndExpand" Text="{Binding Converter={StaticResource converter}}"/>
</StackLayout>
</DataTemplate>
</chart:ChartDataMarker.LabelTemplate>
</chart:ChartDataMarker>
</chart:PieSeries.DataMarker>
</chart:PieSeries> |
public class DataMarkerConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (parameter != null && parameter.ToString() == "Label")
{
if (value is List<object>)
{
return "Others";
}
else
{
if (value != null)
{
return (value as Model).XValue;
}
}
}
else
{
if (value is List<object>)
{
return (value as List<object>).Sum(item => (item as Model).YValue).ToString();
}
else
{
if (value != null)
{
return (value as Model).YValue;
}
}
}
return null;
}
}
|
private void SfChart_SelectionChanged(object sender, ChartSelectionEventArgs e)
{
if (e.SelectedDataPointIndex >= 0)
{
object data = DependencyService.Get<IChartDependencyService>().GetDataPoint(e.SelectedSeries as PieSeries, e.SelectedDataPointIndex);
if (data is List<object>)
{
//Grouped segment is selected.
this.DisplayAlert("Selected Grouped Data", "Yes", "Ok");
}
}
}
public interface IChartDependencyService
{
object GetDataPoint(PieSeries series,int selectedIndex);
}
|
public class AndroidDependencyService : IChartDependencyService
{
public object GetDataPoint(PieSeries series, int selectedIndex)
{
var nativeSeries = (Native.PieSeries)SfChartRenderer.GetNativeObject(typeof(PieSeries), series);
PropertyInfo datapoint = typeof(Native.PieSegment).GetProperty("DataPoint", BindingFlags.NonPublic | BindingFlags.Instance);
return datapoint.GetValue(nativeSeries.Segments[selectedIndex], null);
}
}
|
public class iOSDependencyService : IChartDependencyService
{
public object GetDataPoint(PieSeries series, int selectedIndex)
{
var nativeSeries = (Native.SFPieSeries)SfChartRenderer.GetNativeObject(typeof(PieSeries), series);
PropertyInfo datapoint = typeof(Native.SFPieSegment).GetProperty("DataPoint", BindingFlags.NonPublic | BindingFlags.Instance);
return datapoint.GetValue(nativeSeries.Segments[selectedIndex], null);
}
}
|
public class UWPDependencyService : IChartDependencyService
{
public object GetDataPoint(PieSeries series, int selectedIndex)
{
var nativeSeries = (Native.ChartSeriesBase)SfChartRenderer.GetNativeObject(typeof(ChartSeries), series as ChartSeries);
var segments = typeof(Native.ChartSeriesBase).GetField("Segments", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(nativeSeries) as ObservableCollection<Native.ChartSegment>;
return segments[selectedIndex].Item;
}
} |
This post will be permanently deleted. Are you sure you want to continue?
Sorry, An error occured while processing your request. Please try again later.
This page will automatically be redirected to the sign-in page in 10 seconds.