In an earlier blog post I reviewed how to create a line chart using RadChart for Metro. In this blog post I will review how to create a bar chart, and no doubt you will notice some striking similarities.
All of this is done with the Telerik Windows 8 UI Controls.
We’ll begin with the data. Our bar chart will compare revenues for five stores.
[ Click on the image to see full size ]
Our first class will define the StoreRevenue type and will have a static method to generate some sample data (normally, of course, you would get this data from a database or a webservice).
public class StoreRevenue { public string StoreName { get; set; } public double Amount { get; set; } public static ObservableCollection<StoreRevenue> GetStoreRevenue() { var revenues = new ObservableCollection<StoreRevenue>(); revenues.Add( new StoreRevenue() { Amount = 20, StoreName = "Macy's" } ); revenues.Add( new StoreRevenue() { Amount = 50, StoreName = "Gimbels's" } ); revenues.Add( new StoreRevenue() { Amount = 10, StoreName = "A&S" } ); revenues.Add( new StoreRevenue() { Amount = 40, StoreName = "E. J. Korvette" } ); revenues.Add( new StoreRevenue() { Amount = 60, StoreName = "Crazy Eddie's" } ); return revenues; } }
Our ViewModel class will serve as the datacontext for the bar chart,
class ViewModel : INotifyPropertyChanged { private ObservableCollection<StoreRevenue> storeRevenues; public ObservableCollection<StoreRevenue> StoreRevenues { get { return storeRevenues; } set { storeRevenues = value; NotifyPropertyChanged(); } } private void NotifyPropertyChanged( [CallerMemberName] string caller = "" ) { if ( PropertyChanged != null ) { PropertyChanged( this, new PropertyChangedEventArgs( caller ) ); } } public event PropertyChangedEventHandler PropertyChanged; }
In the code behind for MainPage.xaml we’ll set the datacontext and populate the StoreRevenues property of the VM,
protected override void OnNavigatedTo(NavigationEventArgs e) { var vm = new ViewModel(); vm.StoreRevenues = StoreRevenue.GetStoreRevenue(); DataContext = vm; }
We’re now ready to implement the bar chart. We begin by creating a resource for the label style.
<Page.Resources> <Style x:Key="LabelStyle" TargetType="TextBlock"> <Setter Property="FontSize" Value="20"></Setter> <Setter Property="Foreground" Value="Yellow" /> </Style> </Page.Resources>
We turn next to the Grid, where we’ll add an internal Grid with two columns and two rows,
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Grid Name="xStoreRevenue" Grid.Column="2" Grid.Row="2"> <Grid.RowDefinitions> <RowDefinition Height="30"></RowDefinition> <RowDefinition Height="*"></RowDefinition> </Grid.RowDefinitions>
The first column in the first row holds a label for the chart,
<TextBlock Style="{StaticResource BaselineTextStyle}" Text="REVENUE by STORE ($thousand)"></TextBlock>
We’re now, finally, ready to add the RadCartesianChart. We begin by setting the MajorLinesVisibility to display,
<telerik:RadCartesianChart Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <telerik:RadCartesianChart.Grid> <telerik:CartesianChartGrid MajorLinesVisibility="Y"></telerik:CartesianChartGrid> </telerik:RadCartesianChart.Grid>
Next we’ll set the VerticalAxis, which will be a linear axis that will hold the values, and the horizontal axis which is a categorical axis to hold the store names,
<telerik:RadCartesianChart.VerticalAxis> <telerik:LinearAxis LabelStyle="{StaticResource LabelStyle}"></telerik:LinearAxis> </telerik:RadCartesianChart.VerticalAxis> <telerik:RadCartesianChart.HorizontalAxis> <telerik:CategoricalAxis LabelStyle="{StaticResource LabelStyle}" LabelFitMode="MultiLine"></telerik:CategoricalAxis> </telerik:RadCartesianChart.HorizontalAxis>
We turn now to the Series, which will be a BarSeries, and thus a Bar chart. The first task is to set the ItemsSource to bind to the StoreRevenues property of the VM (shown above),
<telerik:RadCartesianChart.Series> <telerik:BarSeries ItemsSource="{Binding StoreRevenues}">
We set the value binding to bind to the property Amount,
<telerik:BarSeries.ValueBinding> <telerik:PropertyNameDataPointBinding PropertyName="Amount"></telerik:PropertyNameDataPointBinding> </telerik:BarSeries.ValueBinding>
Similarly, we set the categorical binding to bind to the StoreName and that completes our series and the Chart itself.
<telerik:BarSeries.CategoryBinding> <telerik:PropertyNameDataPointBinding PropertyName="StoreName"></telerik:PropertyNameDataPointBinding> </telerik:BarSeries.CategoryBinding> </telerik:BarSeries> </telerik:RadCartesianChart.Series> </telerik:RadCartesianChart>
That’s all there is to creating a bar chart with the RadCartesianChart, part of the RadControls For Metro.