WPF привязка к статической двойной переменной - PullRequest
1 голос
/ 23 апреля 2010

у меня есть эти двойные значения:

 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 ]

1 голос
/ 23 апреля 2010

Ну, чтобы заставить ваш 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 голос
/ 23 апреля 2010

Вы также можете объявить их в 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"];
}
0 голосов
/ 23 апреля 2010

Вы не можете. Это переменные с локальной областью для конструктора окна. Возможно, вы захотите превратить их в общедоступные статические поля, например:

public static readonly double Num1 = 50.0;

... и затем ссылаться на них в XAML, используя расширение разметки {x: Static}, например:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...