How To Hide The Legend In Static And Dynamic Column Chart In WPF With MVVM Pattern Using Prism Library (by Rahul Bansal)

I hope you have some knowledge of WPF and XAML before starting.

PurposeSometimes, the client does not need the legend in the chart, which can increase your chart plotting area as well.

To know more about MVVM using prism, follow- http://www.c-sharpcorner.com/article/getting-started-mvvm-pattern-using-prism-library-in-wpf/.

Before starting, I hope you added the ‘Prism.Unity’ from ‘NuGet Packages’ and for charting, we will do the same for charting controls package.

NoteIn this article, I am using Visual Studio 2015.

Step 1Create a project named ‘PrismMVVMTestProject’ of WPF Application.

Step 2Right click on the project and select ‘Manage NuGet Package.

Step 3

For charting controls, type ‘System.Windows.Controls.DataVisualization‘ in browse section, select the package and click on install button.

Afterwards, the package is installed successfully.

Now, you can see the newly added DLLs in the reference section of the project.

Step 4It’s a better approach to create three different folders in the project for Model, View and View model respectively.

Step 5Create pages in all the folders.

  • Create a View Named ‘TestView.xaml’ in the Views folder.

  • Create a Model named ‘TestModel.xaml’ in the Models folder.

  • Create a ViewModel Named ‘TestViewModel.xaml’ in the ViewModels folder.

Step 6Add the namespace named ‘Prism.MVVM’ in the TestModel page to inherit the class named ‘Bindable Base’.

Create a class for chart binding with the key and value properties for Axis-X and Y.

  1. class Keyvalue : BindableBase  
  2.     {  
  3.         private string _Key;  
  4.         public string Key { get { return _Key; } set { SetProperty(ref _Key, value); } }  
  5.   
  6.         private int _Value;  
  7.         public int Value { get { return _Value; } set { SetProperty(ref _Value, value); } }  
  8.     }  

Create a list type property named DataList to store the multiple values of the keyvalue class 

  1. class TestModel : BindableBase  
  2.     {  
  3.         private List<Keyvalue> _DataList;  
  4.         public List<Keyvalue> DataList { get { return _DataList; } set { SetProperty(ref _DataList, value); } }  
  5.     }  

Step 7On the TetsView page, we like to 

Access the assembly of charting on the top of the view .

  1. xmlns:ChartToolKit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"  

Create 2 Group Boxes with different header names for static and dynamic charts respectively, where 1st will contain a chart with a column series with an itemsource, IndependentvaluePath and DependentvaluePath property.

NoteHere, Itemsource property is bound with ‘DataList’ property, which we have created in TestModel class and for IndependentvaluePath & DependentvaluePath property, we use ‘Key’ and ‘Value’ of KeyValue Class.

2nd groupbox didn’t contain anything, as it just has a name.

  1. <Grid>  
  2.     <Grid.RowDefinitions>  
  3.         <RowDefinition></RowDefinition>  
  4.         <RowDefinition></RowDefinition>  
  5.     </Grid.RowDefinitions>  
  6.     <GroupBox Grid.Row="0" Header="Static Column Chart">  
  7.         <ChartToolKit:Chart>  
  8.             <ChartToolKit:ColumnSeries ItemsSource="{Binding Path=TestModel.DataList,  
  9.             UpdateSourceTrigger=PropertyChanged,Mode=TwoWay, NotifyOnSourceUpdated=True }"   
  10.             IndependentValuePath="Key"  
  11.             DependentValuePath="Value">  
  12.             </ChartToolKit:ColumnSeries>  
  13.         </ChartToolKit:Chart>  
  14.     </GroupBox>  
  15.     <GroupBox  Grid.Row="1" Header="Dynamic Column Chart" x:Name="GroupBoxDynamicChart">  
  16.     </GroupBox>  
  17. </Grid>  

Step 8Add PrismMVVMTestProject.ViewModels namespace and bind the data context of TestView page to the ViewModel named ‘TestViewModel’ and pass the 2nd groupbox into it. 

  1. using System.Windows;  
  2. using PrismMVVMTestProject.ViewModels;  
  3. namespace PrismMVVMTestProject.Views  
  4. {  
  5.     /// <summary>  
  6.     /// Interaction logic for TestView.xaml  
  7.     /// </summary>  
  8.     public partial class TestView : Window  
  9.     {  
  10.         public TestView()  
  11.         {  
  12.             InitializeComponent();  
  13.             this.DataContext = new TestViewModel(GroupBoxDynamicChart);  
  14.         }  
  15.     }  
  16. }  

Step 9

  1. Add the namespace named ‘Prism.MVVM’ and ‘PrismMVVMTestProject.Models’ in the TestViewModel page to inherit the class named ‘Bindable Base’ and access TestModel in this page.

  2. Create a property of TestModel class object, where ‘ref‘ parameter allows you to update its value.

  3. Create a local list of Keyvalue class named ‘tempList’ and add some data into it.

    1. List<Keyvalue> tempList = new List<Keyvalue>();  
    2.             tempList.Add(new Keyvalue() { Key = "Rs.100", Value = 50 });  
    3.             tempList.Add(new Keyvalue() { Key = "Rs.500", Value = 18 });  
    4.             tempList.Add(new Keyvalue() { Key = "Rs.1000", Value = 25 });  
    5.             tempList.Add(new Keyvalue() { Key = "Rs.2000", Value = 5 });  
  1. Assign ‘tempList’ to ‘TestModel.DataList’ to bind the static chart.

    1. //Bind the sttaic Chart  
    2.   
    3. TestModel.DataList = tempList;  
  2. Create the dynamic chart and column series.
  3. Bind the item source of the column series with ‘tempList’.
  4. To bind the IndependentvaluePath & DependentvaluePath property, we use ‘Key’ and ‘Value’ of KeyValue Class same as in static chart.
  5. Add the series in to the chart and chart into the groupbox.
  1. //Create the Dynamic Chart, Bind it and add it into the 2nd GroupBox  
  2.             Chart dynamicChart = new Chart();  
  3.             ColumnSeries columnseries = new ColumnSeries();  
  4.             columnseries.ItemsSource = tempList;  
  5.             columnseries.DependentValuePath = "Value";  
  6.             columnseries.IndependentValuePath = "Key";  
  7.             dynamicChart.Series.Add(columnseries);  
  8.             GroupBoxDynamicChart.Content = dynamicChart;  

Run the page.

Now, if want to hide the legend of series 1; either in static chart or dynamic chart, then you need to do it via style, where you change the ‘LegendStyle’ property of the chart with custom style, where width and height will be 0.

For static chart

  • Create a style with the width and the height property and both holds the value 0.
  • Add that style inside the ‘LegendStyle’ property tag of the chart.

    1. <ChartToolKit:Chart.LegendStyle>  
    2.                     <Style x:Name="LegendHideStyle" TargetType="Control">  
    3.                         <Setter Property="Width" Value="0"/>  
    4.                         <Setter Property="Height" Value="0"/>  
    5.                     </Style>  
    6.                 </ChartToolKit:Chart.LegendStyle>  

For dynamic chart-TestViewModel

  • Add a namespace named ‘Windows’ to add a style in ‘TestViewModel’.

  • Now, create a style with the width, height property and both holds the value 0.
  • Add that style to the ‘LegendStyle’ property of the chart before adding it to the groupbox.

    1. Style styleLegand = new Style { TargetType = typeof(Control) };  
    2. styleLegand.Setters.Add(new Setter(Control.WidthProperty, 0d));  
    3. styleLegand.Setters.Add(new Setter(Control.HeightProperty, 0d));  
    4. dynamicChart.LegendStyle = styleLegand;  

Now, you can see the output, where we don’t have the legend and got more space for the chart in comparison to the earlier output.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

TOP