2010-04-23 69 views
1

我有這雙重價值:WPF綁定到靜態無功雙

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}}" /> 

.... 

幫助,請

+0

POS欺騙? http://stackoverflow.com/questions/1481130/wpf-binding-to-local-variable – dsolimano 2010-04-23 13:21:10

回答

0

你不能。它們是範圍侷限於窗口構造函數的變量。您可能希望把他們變成公共靜態字段是這樣的:

public static readonly double Num1 = 50.0; 

...,然後使用引用它們在XAML {X:靜態}標記擴展,像這樣:

<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}}}" /> 

最後,你可以讓他們一個DependencyProperty如果變化是由XAML UI可以自動檢測到。

+0

我做到了這一點: public static double _staticNum1 = 50.0; public double Num1 { 得到 { return _staticNum1; } set { _staticNum1 = value; } } 和綁定工作, 虐待嘗試執行dependencyProperty下一個 謝謝 – devin250 2010-04-23 13:44:35

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

你可以宣佈「時間在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"]; 
}