C# WPF量规中的动态值

C# WPF量规中的动态值,c#,wpf,gauge,livecharts,C#,Wpf,Gauge,Livecharts,我是WPF和C的新手,但多亏了这个社区,我很快就学会了。我已经试着在我的项目中实现一个来自实时图表的角度测量仪。它只需要一个绑定值,其余的值都是固定的,就像这个例子:() 有人能帮我修改代码,使其动态化吗?我希望将它们绑定到数据库中的值,或者根据我的目标计算它们,而不是在FromValue:ToValue:。所有建议都非常受欢迎 以下是我迄今为止所做的工作: XAML: 我希望实现但不起作用的目标(我知道它没有起作用的机会,但我希望有人能帮助我正确地重写它): XAML: 我不熟悉这个特定的库,

我是WPF和C的新手,但多亏了这个社区,我很快就学会了。我已经试着在我的项目中实现一个来自实时图表的角度测量仪。它只需要一个绑定值,其余的值都是固定的,就像这个例子:()

有人能帮我修改代码,使其动态化吗?我希望将它们绑定到数据库中的值,或者根据我的目标计算它们,而不是在FromValue:ToValue:。所有建议都非常受欢迎

以下是我迄今为止所做的工作:

XAML:

我希望实现但不起作用的目标(我知道它没有起作用的机会,但我希望有人能帮助我正确地重写它):

XAML:


我不熟悉这个特定的库,但是查看一下显示FromValue和ToValue属性是依赖属性,因此可以将它们绑定到一个值。看起来可能只是因为您没有将值属性实现为
dependencProperty

尝试实现类似以下内容的属性:

public static readonly DependencyProperty Value25Property = DependencyProperty.Register(
    "Value25", 
    typeof(double), 
    typeof(MainWindow));

public double Value25
{
    get { return (double) GetValue(Value25Property); }
    set { SetValue(Value25Property, value); }
}

你的问题很广泛,特别是缺乏一个好的答案。但是您似乎没有在
main窗口
类中实现
INotifyPropertyChanged
。您最好为这些属性创建一个单独的视图模型类,但是如果您希望绑定反映在绑定初始化后设置的值,则属性所属的类需要实现
INotifyPropertyChanged
。您好,Peter!很抱歉,我没能遵循指导方针。第一个示例是可验证且有效的。然后,第二种方法可以用来翻译我想要实现的目标。我不知道该怎么写,我指望像你这样的人能帮助我,他知识渊博得多。谢谢您的及时建议。您的问题与特殊仪表或动态图表无关。为了提出一个好的堆栈溢出问题,您需要提供一个代码示例,该示例将基本问题提取为演示问题所需的最少代码量。或者,您可以阅读许多关于WPF和数据绑定的教程中的任何一个。那也行。如果我的问题对你来说不够好,我很抱歉。为了使代码最小化,我已经去掉了很多代码。我正在演示什么有效,什么无效。阅读教程对这个问题没有帮助,我已经做了。我知道你想在将来帮助我写出更好的问题和例子,但如果你能像这个社区的其他成员一样帮我写这个例子,我将不胜感激。我同意你的观点,这可能不是最好的例子,但我不知道如何更好地阐述它。干杯源属性不必是
dependencProperty
,绑定才能工作。@PeterDuniho源属性不必是
dependencProperty
,初始绑定才能工作。在这种情况下,所有属性的默认值均为0,并且它们将被显式设置。因此,它们需要实现为
depenceyproperty
,或者OP必须实现
INotifyPropertyChanged
@Jason:被绑定的属性可以实现为依赖属性,但由于它们不是窗口的属性,也不需要成为绑定的目标,这样做没有意义,而且,向WPF新手推荐这样做会使他们的场景过于复杂,没有什么好的理由。他们所需要的只是一个合适的视图模型,就像任何好的WPF程序一样。@PeterDuniho我理解你关于视图模型的观点,并同意在开发WPF应用程序时,这是“正确”的方法,但深入解释MVVM似乎超出了问题的范围。OP有一个关于将
AngularSection
properties绑定到
main窗口上的属性的特定问题
@Jason:“深入解释MVVM似乎超出了问题的范围”——深入解释MVVM正是问题所要求的,这就是为什么它太宽泛的原因。这真的不应该被回答,伊姆霍。如果你要回答一个太宽泛的问题,你需要正确地回答。不要教他错误的东西,使OP的困惑更加复杂。
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;
            }
        }

    }
<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>
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;
            }
        }

    }
public static readonly DependencyProperty Value25Property = DependencyProperty.Register(
    "Value25", 
    typeof(double), 
    typeof(MainWindow));

public double Value25
{
    get { return (double) GetValue(Value25Property); }
    set { SetValue(Value25Property, value); }
}