使用 wpf 实时图表库时,我无法显示数据的折线图。我怀疑数据绑定错误
While using wpf live chart library, I can't show line chart from data. I suspect data binding mistake
我正在尝试使用数据库中的数据显示笛卡尔图表。
但我一直坚持用图表显示数据。
我检查了数据是否正确地放入了系列集合中。
所以我认为数据绑定有错误。
这是我在 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' 是否在主窗口 class 中声明。
所以我认为绑定应该有效。我在这段代码中哪里犯了错误?
请帮忙
谢谢。
您正在尝试对私有字段执行绑定,这是错误的。如果您希望绑定正常工作,mainData 和 mainDataLabel 必须是 public 属性,而不是字段。
所以...应该是:
public List<string> MainDataLabel { get;set; }
public SeriesCollection MainData { get;set; }
希望对你有用:)
您应该使用依赖属性来绑定详细信息,如下所示:
public static readonly DependencyProperty MainDataLabelProperty =
DependencyProperty.Register("MainDataLabel", typeof(string), typeof(MainWindow), new
PropertyMetadata("", new PropertyChangedCallback(OnSetTextChanged)));
public string MainDataLabel{
get { return (string)GetValue(SetTextProperty); }
set { SetValue(MainDataLabelProperty, value); }
}
我正在尝试使用数据库中的数据显示笛卡尔图表。 但我一直坚持用图表显示数据。
我检查了数据是否正确地放入了系列集合中。 所以我认为数据绑定有错误。
这是我在 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' 是否在主窗口 class 中声明。 所以我认为绑定应该有效。我在这段代码中哪里犯了错误? 请帮忙
谢谢。
您正在尝试对私有字段执行绑定,这是错误的。如果您希望绑定正常工作,mainData 和 mainDataLabel 必须是 public 属性,而不是字段。
所以...应该是:
public List<string> MainDataLabel { get;set; }
public SeriesCollection MainData { get;set; }
希望对你有用:)
您应该使用依赖属性来绑定详细信息,如下所示:
public static readonly DependencyProperty MainDataLabelProperty = DependencyProperty.Register("MainDataLabel", typeof(string), typeof(MainWindow), new PropertyMetadata("", new PropertyChangedCallback(OnSetTextChanged)));
public string MainDataLabel{
get { return (string)GetValue(SetTextProperty); }
set { SetValue(MainDataLabelProperty, value); }
}