# Quick Start

## Content

This quick start is intended to guide you through a step-by-step process of creating a simple FlexPie application and running the same in Visual Studio.

Complete the following steps to see how FlexPie appears on running the application:

### Adding FlexPie to the Application

1. Create a **WPF** **Application (.NET Framework/.NET Core)** for **.NET Framework** version and **.NET** versions in Visual Studio.
2. Drag and drop the **C1FlexPie** control to the MainWindow.
    The following dlls or Nuget Packages are automatically added to the application:
    **C1.WPF.4.6.2** or **C1.WPF.Core** for **.NET** version
    **C1.WPF.DX.4.6.2** or **C1.WPF.DX** for **.NET** version
    **C1.WPF.FlexChart.4.6.2** or **C1.WPF.Chart** for **.NET** version.
<br>
    The XAML markup resembles the following code in the **\<Grid>\</Grid>** tags.
3. **xml**

    ```xml
    <c1:C1FlexPie x:Name="flexPie" 
                  Binding="Value" 
                  BindingName="Name" 
                  HorizontalAlignment="Left" 
                  Height="300" 
                  VerticalAlignment="Top" 
                  Width="300">
        <c1:C1FlexPie.ItemsSource>
            <c1:FlexPieSliceCollection>
                <c1:FlexPieSlice Name="Slice1" Value="1"/>
                <c1:FlexPieSlice Name="Slice2" Value="2"/>
                <c1:FlexPieSlice Name="Slice3" Value="3"/>
                <c1:FlexPieSlice Name="Slice4" Value="4"/>
            </c1:FlexPieSliceCollection>
        </c1:C1FlexPie.ItemsSource>
    </c1:C1FlexPie>
    ```

### Binding FlexPie to a Data Source

1. Add a class **DataCreator** and add the following code.
    **vbnet**

    ```vbnet
    Public Class DataCreator
        Public Shared Function CreateFruit() As List(Of FruitDataItem)
            Dim fruits = New String() {"Oranges", "Apples", "Pears", "Bananas"}
            Dim count = fruits.Length
            Dim result = New List(Of FruitDataItem)()
            Dim rnd = New Random()
            For i As Object = 0 To count - 1
                result.Add(New FruitDataItem() With {
                    .Fruit = fruits(i),
                    .March = rnd.[Next](20),
                    .April = rnd.[Next](20),
                    .May = rnd.[Next](20)
                })
            Next
            Return result
        End Function
    End Class
    Public Class FruitDataItem
        Public Property Fruit() As String
            Get
                Return m_Fruit
            End Get
            Set
                m_Fruit = Value
            End Set
        End Property
        Private m_Fruit As String
        Public Property March() As Double
            Get
                Return m_March
            End Get
            Set
                m_March = Value
            End Set
        End Property
        Private m_March As Double
        Public Property April() As Double
            Get
                Return m_April
            End Get
            Set
                m_April = Value
            End Set
        End Property
        Private m_April As Double
        Public Property May() As Double
            Get
                Return m_May
            End Get
            Set
                m_May = Value
            End Set
        End Property
        Private m_May As Double
    End Class
    ```

    **csharp**

    ```csharp
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace FlexPieQuickStart
    {
        class DataCreator
        {
            public static List<FruitDataItem> CreateFruit()
            {
                var fruits = new string[] { "Oranges", "Apples", "Pears", "Bananas" };
                var count = fruits.Length;
                var result = new List<FruitDataItem>();
                var rnd = new Random();
                for (var i = 0; i < count; i++)
                    result.Add(new FruitDataItem()
                    {
                        Fruit = fruits[i],
                        March = rnd.Next(20),
                        April = rnd.Next(20),
                        May = rnd.Next(20),
                    });
                return result;
            }
        }
        public class FruitDataItem
        {
            public string Fruit { get; set; }
            public double March { get; set; }
            public double April { get; set; }
            public double May { get; set; }
        }
    }
    ```
2. Edit the XAML markup to provide data to FlexPie.
<br>
    **xml**

    ```xml
    <Window
             x:Class="FlexPieQuickStart.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:FlexPieQuickStart"
            mc:Ignorable="d"
            DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}"
            xmlns:Chart="http://schemas.componentone.com/winfx/2006/xaml"
            Title="MainWindow" Height="800" Width="800">
        <Grid>
            <Chart:C1FlexPie 
                x:Name="flexPie" 
                Binding="April" 
                BindingName="Fruit" 
                ItemsSource="{Binding DataContext.Data}">
                <Chart:C1FlexPie.SelectionStyle>
                    <Chart:ChartStyle Stroke="Red" 
                                      StrokeThickness="2"/>
                </Chart:C1FlexPie.SelectionStyle>
                <Chart:C1FlexPie.DataLabel>
                    <Chart:PieDataLabel Content="{}{y}"/>
                </Chart:C1FlexPie.DataLabel>
            </Chart:C1FlexPie>
        </Grid>
    ```

>type=note
> To specify the binding source, you need to add the **DataContext = "{Binding RelativeSource={RelativeSource Mode=Self}}"** markup in the **\<Window>** tag of the **MainWindow.xaml** file.
3. Switch to **Code view** and add the following code.
    **vbnet**

    ```vbnet
    Partial Public Class MainWindow
        Inherits Window
        Private _data As List(Of FruitDataItem)
        Public Sub New()
            InitializeComponent()
        End Sub
        Public ReadOnly Property Data() As List(Of FruitDataItem)
            Get
                If _data Is Nothing Then
                    _data = DataCreator.CreateFruit()
                End If
                Return _data
            End Get
        End Property
    End Class
    ```

    **csharp**

    ```csharp
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    namespace FlexPieQuickStart
    {
        public partial class MainWindow : Window
        {
            List<FruitDataItem> _data;
            public MainWindow()
            {
                InitializeComponent();
            }
            public List<FruitDataItem> Data
            {
                get
                {
                    if (_data == null)
                    {
                        _data = DataCreator.CreateFruit();
                    }
                    return _data;
                }
            }
        }
    }
    ```

### Running the Application

Press F5 to run the application and observe the following output.

![](https://cdn.mescius.io/document-site-files/images/8ba28e07-1633-4a6a-9114-13b9f1f04eed/images/flexpiequickstart.png)