I am new at WPF and C# but I am picking up quite swiftly thanks to this community. I have tried to implement an Angular Gauge from live charts into my project. It works great with only one binded value and the rest of the values fixed like in this example: (https://lvcharts.net/App/examples/v1/wpf/Angular%20Gauge).
Can someone please help me adapt my code in order to make it dynamic? Instead of having fixed values in FromValue: ToValue: I would like to bind them to values from my database or calculate them based on my target. All suggestions are more than welcome.
Here's what I have so far and works:
XAML:
<lvc:AngularGauge Value="{Binding Value}" FromValue="0" Grid.Column="1" ToValue="250"
LabelsStep="50" TicksStep="25" Wedge="300"
TicksForeground="White" Foreground="WhiteSmoke"
FontWeight="Bold" FontSize="16"
SectionsInnerRadius=".6" Width="310">
<lvc:AngularGauge.Sections>
<lvc:AngularSection FromValue="0" ToValue="62.5" Fill="#dd5143"/>
<lvc:AngularSection FromValue="62.5" ToValue="125" Fill="#e68523"/>
<lvc:AngularSection FromValue="125" ToValue="187.5" Fill="#edb220"/>
<lvc:AngularSection FromValue="175" ToValue="250" Fill="#7cb82f"/>
</lvc:AngularGauge.Sections>
</lvc:AngularGauge>
C#:
namespace Car_App
public partial class MainWindow : MetroWindow
{
private double _value;
public MainWindow()
{
InitializeComponent();
string connectionString = "datasource=xx.xx.xxx.xxx;port=xxxx;username=xxxx;password=xxx";
string sMonth = DateTime.Now.ToString("MM");
string sYear = DateTime.Now.ToString("yyyy");
MySqlConnection connection = new MySqlConnection(connectionString);
MySqlCommand cmd = new MySqlCommand("Select * from Table.MyTable where MONTH(Date) = @sMonth AND YEAR(Date) = @sYear", connection);
MySqlCommand sCarCT = new MySqlCommand("Select TotalCarCount from Table.CarTotals where sMonth = @sMonth", connection);
MySqlCommand target = new MySqlCommand("Select Target from Table.Targets where Location = 'xxxxx'", connection);
try
{
connection.Open();
cmd.Parameters.Add(new MySqlParameter("sMonth", sMonth));
cmd.Parameters.Add(new MySqlParameter("sYear", sYear));
sCarCT.Parameters.Add(new MySqlParameter("sMonth", sMonth));
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
dtGrid.DataContext = dt;
Value = double.Parse(sCarCT.ExecuteScalar().ToString());
DataContext = this;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
connection.Close();
}
public double Value
{
get { return _value; }
set
{
_value = value;
}
}
}
What I would like to achieve but doesn't work (I know it doesn't have a chance of working but I am hoping someone could help me rewrite it correctly):
XAML:
<lvc:AngularGauge Value="{Binding Value}" FromValue="0" Grid.Column="1" ToValue="{Binding ValueT}"
LabelsStep="50" TicksStep="25" Wedge="300"
TicksForeground="White" Foreground="WhiteSmoke"
FontWeight="Bold" FontSize="16"
SectionsInnerRadius=".6" Width="310">
<lvc:AngularGauge.Sections>
<lvc:AngularSection FromValue="0" ToValue="{Binding Value25}" Fill="#dd5143"/>
<lvc:AngularSection FromValue="{Binding Value25}" ToValue="{Binding Value50}" Fill="#e68523"/>
<lvc:AngularSection FromValue="{Binding Value50}" ToValue="{Binding Value75}" Fill="#edb220"/>
<lvc:AngularSection FromValue="{Binding Value75}" ToValue="{Binding ValueT}" Fill="#7cb82f"/>
</lvc:AngularGauge.Sections>
</lvc:AngularGauge>
C#:
namespace Car_App
public partial class MainWindow : MetroWindow
{
private double _value;
public MainWindow()
{
InitializeComponent();
string connectionString = "datasource=xx.xx.xxx.xxx;port=xxxx;username=xxxx;password=xxx";
string sMonth = DateTime.Now.ToString("MM");
string sYear = DateTime.Now.ToString("yyyy");
MySqlConnection connection = new MySqlConnection(connectionString);
MySqlCommand cmd = new MySqlCommand("Select * from Table.Car where MONTH(Date) = @sMonth AND YEAR(Date) = @sYear", connection);
MySqlCommand sCarCT = new MySqlCommand("Select TotalCarCount from Table.CarTotals where sMonth = @sMonth", connection);
MySqlCommand target = new MySqlCommand("Select Target from Table.Targets where Location = 'xxxxx'", connection);
try
{
connection.Open();
cmd.Parameters.Add(new MySqlParameter("sMonth", sMonth));
cmd.Parameters.Add(new MySqlParameter("sYear", sYear));
sCR.Parameters.Add(new MySqlParameter("sMonth", sMonth));
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
dtGrid.DataContext = dt;
Value = double.Parse(sCarCT.ExecuteScalar().ToString());
ValueT = double.Parse(target.ExecuteScalar().ToString());
Value75 = ValueT - ValueT*25%;
Value50 = ValueT - ValueT*50%;
Value25 = ValueT - ValueT*75%;
DataContext = this.Value, this.ValuT, this.Value25, this.Value50, this.Value75;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
connection.Close();
}
public double Value
{
get { return _value; }
set
{
_value = value;
}
}
public double ValueT
{
get { return _value; }
set
{
_value = value;
}
}
public double Value75
{
get { return _value; }
set
{
_value = value;
}
}
public double Value50
{
get { return _value; }
set
{
_value = value;
}
}
public double Value25
{
get { return _value; }
set
{
_value = value;
}
}
}