2010-04-23 6 views
1

statique j'ai ces valeurs doubles:WPF se lient à un double var

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; 

     } 
    } 

comment je ne les lient à XAML?

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

.... 

aide s'il vous plaît

+0

pos duper? http://stackoverflow.com/questions/1481130/wpf-binding-to-local-variable – dsolimano

Répondre

0

Vous ne pouvez pas. Ce sont des variables avec une portée locale au constructeur de la fenêtre. Vous pouvez les transformer en champs statiques publics comme ceci:

public static readonly double Num1 = 50.0; 

... puis les référencer dans XAML en utilisant {x: statique} extension de balisage comme ceci:

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

Alternativement, vous peut vouloir les transformer en propriétés si elles sont destinées à être changé comme:

public double Num1 { get; set; } 

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

en fin de compte, vous pouvez les faire DependencyProperty si des changements doivent être détectés automatiquement par l'interface utilisateur XAML.

+0

J'ai fait ceci: public static double _staticNum1 = 50.0; public double Num1 { get { return _staticNum1; } jeu { _staticNum1 = valeur; } } et la liaison a fonctionné, essayez d'implémenter la dependencyProperty suivant merci – devin250

1

Eh bien, pour rendre votre travail XAML comme est que vous pouvez les stocker dans le dictionnaire de ressources comme ceci:

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

Mais ce n'est pas comment vous le faites généralement. Au lieu de cela, vous devez lier à une collection. Quelque chose comme ce qui suit serait plus utile.

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

Je ne sais pas vraiment l'API pour le contrôle de carte que vous utilisez, mais c'est un modèle couramment utilisé dans WPF pour avoir une propriété ItemsSource qui peut se lier à une collection de valeurs.

1

vous pouvez déclarer « em en XAML aussi .....

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

puis, si vous avez besoin d'accéder via le code ....

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