WPF绑定到静态双变量

时间:2010-04-23 13:14:32

标签: wpf binding

我有这些双重值:

 public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            double num1 = 50.0;
            double num2 = 90.0;
            double num3 = 120.0;
            double num4 = 20.0;
            double num5 = 80.0;

        }
    }

如何将它们绑定到xaml?

<vc:Chart.Series>
                <vc:DataSeries RenderAs="Column" AxisYType="Primary" >
                    <vc:DataSeries.DataPoints>
                        <vc:DataPoint AxisXLabel="Wall-Mart" YValue="{Binding Source={StaticResource num1}}" />

....

请帮助

3 个答案:

答案 0 :(得分:1)

好吧,为了使您的XAML按原样运行,您可以将它们存储在资源字典中,如下所示:

public Window1()
{
    InitializeComponent();
    // don't actually do this
    this.Resources["num1"] = 50.0;
    this.Resources["num2"] = 90.0;
    this.Resources["num3"] = 120.0;
    this.Resources["num4"] = 20.0;
    this.Resources["num5"] = 80.0;
}

但这不是你一般的做法。相反,你应该绑定到一个集合。像下面这样的东西会更有用。

public Window1()
{
    InitializeComponent();
    myDataSeries.ItemsSource = new double[] {50.0,90.0,120.0,20.0,80.0};
}

我真的不知道您正在使用的图表控件的API,但这是WPF中常用的模式,它具有可以绑定到值集合的ItemsSource属性。

答案 1 :(得分:1)

你也可以在XAML中宣布他们......

<Application
    xmlns:clr="clr-namespace:System;assembly=mscorlib">
    <Application.Resources>
          <clr:Double x:Key="num1">50.0</clr:Double>
          <clr:Double x:Key="num2">90.0</clr:Double>
          <clr:Double x:Key="num3">120.0</clr:Double>
          <clr:Double x:Key="num4">20.0</clr:Double>
          <clr:Double x:Key="num5">80.0</clr:Double>
    </Application.Resources>
</Application>

然后,如果您需要通过代码访问....

if (Application.Current.Resources.Contains("num1"))
{
    (double)Application.Current.Resources["num1"];
}

答案 2 :(得分:0)

你做不到。它们是具有窗口构造函数本地范围的变量。您可能希望将它们转换为公共静态字段,如下所示:

public static readonly double Num1 = 50.0;

...然后使用{x:Static}标记扩展名在XAML中引用它们,如下所示:

<vc:DataPoint AxisXLabel="Wall-Mart" YValue="{x:Static local:Window1.Num1}" />

或者,您可能希望将它们转换为属性,如果它们要更改为:

public double Num1 { get; set; }

<vc:DataPoint AxisXLabel="Wall-Mart" YValue="{Binding Num1,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}" />

最终,如果要通过XAML UI自动检测到更改,您可以将它们设为DependencyProperty。