При использовании библиотеки графиков wpf, я не могу показать линейный график из данных.Я подозреваю, что ошибка привязки данных - PullRequest
1 голос
/ 14 июня 2019

Я пытаюсь показать декартову диаграмму, используя данные из БД.Но я застрял при отображении данных на графике.

Я проверил, правильно ли введены данные в серию коллекций.Поэтому я думаю, что при привязке данных произошла ошибка.

Это мой код в файле xaml.

<wpf:CartesianChart Name="mainChart" Grid.Row="1" Grid.ColumnSpan="8" Height="250" Series="{Binding mainData}">
    <wpf:CartesianChart.AxisX>
        <wpf:Axis Title="Date" Labels="{Binding mainDataLabel}"></wpf:Axis>
    </wpf:CartesianChart.AxisX>
</wpf:CartesianChart>

А ниже приведена часть моего кода, связанная с диаграммой.

public partial class MainWindow : Window
{
    private SeriesCollection mainData;
    private List<string> mainDataLabel;

    public void GetDataAsCondition(SearchCondition condition)
    {

        // Here is some code to get data from DB

        for (int idx = 0; idx < mainDataTable.Columns.Count; idx++)
        {
            if (idx > 0)
            {
                LineSeries tmpLineSeries = new LineSeries();
                List<int> tmpDataList = new List<int>();
                tmpLineSeries.Title = mainDataTable.Columns[idx].ColumnName;

                for (int rowCnt = 0; rowCnt < mainDataTable.Rows.Count; rowCnt++)
                {
                    tmpDataList.Add(Int32.Parse(mainDataTable.Rows[rowCnt][idx].ToString()));
                }
                tmpLineSeries.Values = new ChartValues<int>(tmpDataList);

                mainData.Add(tmpLineSeries);

            }
            else if (idx == 0)
            {

                for (int rowCnt = 0; rowCnt < mainDataTable.Rows.Count; rowCnt++)
                {
                    mainDataLabel.Add(mainDataTable.Rows[rowCnt][idx].ToString());
                }

            }
        }
    }
}

Я проверил свойство привязки 'mainData', объявленное в классе mainwindow.Поэтому я думаю, что привязка должна работать.Где я допустил ошибку в этом коде?Пожалуйста, помогите.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

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

публичная статическая только для чтения DependencyProperty MainDataLabelProperty = DependencyProperty.Register ("MainDataLabel", typeof (строка), typeof (MainWindow), новый PropertyMetadata ("", новый PropertyChangedCallback (OnSetTextChanged)));

  public string MainDataLabel{ 
     get { return (string)GetValue(SetTextProperty); } 
     set { SetValue(MainDataLabelProperty, value); } 
  } 
0 голосов
/ 14 июня 2019

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

Итак ... Это должно быть:


public List<string> MainDataLabel { get;set; }

public SeriesCollection MainData { get;set; }

Надеюсь, это сработает для вас:)

...