I hope, you have some knowledge of WPF and XAML before starting.To know more about MVVM using Prism, follow this link: http://www.c-sharpcorner.com/article/getting-started-mvvm-pattern-using-prism-library-in-wpf.
Before starting, I hope you have added the ‘Prism.Unity’ from ‘NuGet Packages’ and for charting, we will do the same for charting controls package.
Note
In this article, I am using Visual Studio 2015.
Step 1
Create a project named ‘PrismMVVMTestProject’ of WPF Application.
![]()
Step 2
![]()
Right click on the project and select ‘Manage NuGet Packages’.
Step 3
- For charting controls, type ‘System.Windows.Controls.DataVisualization ‘ in browse section, select that package, and click on "Install" button.
![]()
After successfully installing the package, the screenshot will be, as shown below.
Now, you can see the newly added DLLs in the reference section of the project.
Step 4
It’s a better approach to create the 3 different folders in the project for Model, View and View model respectively.
Step 5
- Create the 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 6
Add 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.
- class Keyvalue : BindableBase
- {
- private string _Key;
- public string Key { get { return _Key; } set { SetProperty(ref _Key, value); } }
-
- private int _Value;
- public int Value { get { return _Value; } set { SetProperty(ref _Value, value); } }
- }
- ii) Create a list type property named DataList to store multiple values of keyvalue class
-
- class TestModel : BindableBase
- {
- private List<Keyvalue> _DataList;
- public List<Keyvalue> DataList { get { return _DataList; } set { SetProperty(ref _DataList, value); } }
- }
Step 7
On the TestView page, we do as shown below.
Access the assembly of charting on the top of the view .
- 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 chart respectively, where 1st will contain a chart with a line series with the itemsource, IndependentvaluePath and DependentvaluePath property.
Note
Here, Itemsource property is bound with ‘DataList’ property, which we have created in TestModel class and for IndependentvaluePath & DependentvaluePath property, which we use ‘Key’ and ‘Value’ of KeyValue class.
The second groupbox didn’t contain anything; as it just has a name.
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition></RowDefinition>
- <RowDefinition></RowDefinition>
- </Grid.RowDefinitions>
- <GroupBox Grid.Row="0" Header="Static Line Chart">
- <ChartToolKit:Chart>
- <ChartToolKit:LineSeries ItemsSource="{Binding Path=TestModel.DataList,
- UpdateSourceTrigger=PropertyChanged,Mode=TwoWay, NotifyOnSourceUpdated=True }"
- IndependentValuePath="Key"
- DependentValuePath="Value">
- </ChartToolKit:LineSeries>
- </ChartToolKit:Chart>
- </GroupBox>
- <GroupBox Grid.Row="1" Header="Dynamic Line Chart" x:Name="GroupBoxDynamicChart">
- </GroupBox>
- </Grid>
Step 8
Add PrismMVVMTestProject.ViewModels namespace and bind datacontext of TestView Page to the ViewModel named ‘TestViewModel’. and pass the 2nd groupbox into it.
- using System.Windows;
- using PrismMVVMTestProject.ViewModels;
- namespace PrismMVVMTestProject.Views
- {
-
-
-
- public partial class TestView : Window
- {
- public TestView()
- {
- InitializeComponent();
- this.DataContext = new TestViewModel(GroupBoxDynamicChart);
- }
- }
- }
Step 9
- 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.
- Create a property of TestModel class object, where ‘ref‘ parameter allows you to update its value.
- Create a local list of keyvalue class named ‘tempList’ and add some data into it.
- List<Keyvalue> tempList = new List<Keyvalue>();
- tempList.Add(new Keyvalue() { Key = "Rs.100", Value = 50 });
- tempList.Add(new Keyvalue() { Key = "Rs.500", Value = 18 });
- tempList.Add(new Keyvalue() { Key = "Rs.1000", Value = 25 });
- tempList.Add(new Keyvalue() { Key = "Rs.2000", Value = 5 });
Assign ‘tempList’ to ‘TestModel.DataList’ to bind the static chart.
-
- TestModel.DataList = tempList;
- Create the dynamic chart and line series.
- Bind the item source of line series with ‘tempList’.
- To bind the IndependentvaluePath & DependentvaluePath property we use ‘Key’ and ‘Value’ of KeyValue Class same as in static chart.
- Add the line series in to the chart and chart into the groupbox.
Create the dynamic chart, bind it and add it into the 2nd groupBox
- Chart dynamicChart = new Chart();
- LineSeries lineseries = new LineSeries();
- lineseries.ItemsSource = tempList;
- lineseries.DependentValuePath = "Value";
- lineseries.IndependentValuePath = "Key";
- dynamicChart.Series.Add(lineseries);
- GroupBoxDynamicChart.Content = dynamicChart;
Run the page and see the output.