C# 使用wpf实时图表库时,我可以';t从数据中显示折线图。我怀疑数据绑定错误

C# 使用wpf实时图表库时,我可以';t从数据中显示折线图。我怀疑数据绑定错误,c#,wpf,livecharts,C#,Wpf,Livecharts,我试图使用DB中的数据显示笛卡尔图表。 但我一直在用图表显示数据 我检查了数据是否正确地放入序列集合。 因此,我认为数据绑定存在错误 这是我在xaml文件中的代码 <wpf:CartesianChart Name="mainChart" Grid.Row="1" Grid.ColumnSpan="8" Height="250" Series="{Binding mainData}"> <wpf:CartesianChart.AxisX> <w

我试图使用DB中的数据显示笛卡尔图表。 但我一直在用图表显示数据

我检查了数据是否正确地放入序列集合。 因此,我认为数据绑定存在错误

这是我在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());
                }

            }
        }
    }
}
公共部分类主窗口:窗口
{
私有序列收集主数据;
私有列表主数据标签;
公共无效GetDataAsCondition(搜索条件)
{
//下面是一些从数据库获取数据的代码
for(int idx=0;idx0)
{
LineSeries tmpLineSeries=新的LineSeries();
List tmpDataList=新列表();
tmpLineSeries.Title=mainDataTable.Columns[idx].ColumnName;
对于(int-rowCnt=0;rowCnt
我已经检查了绑定属性“mainData”是否在mainwindow类中声明。 所以我认为装订应该有效。我在代码中哪里犯了错误? 请帮忙


谢谢。

您试图执行到私有字段的绑定,这是错误的。如果要使绑定正常工作,mainData和mainDataLabel必须是公共属性,而不是字段

所以。。。应该是:


公共列表MainDataLabel{get;set;}
公共序列集合主数据{get;set;}

我希望它适用于您:)

您应该使用依赖属性来绑定详细信息,如下所示:

公共静态只读DependencyProperty MainDataLabelProperty= DependencyProperty.Register(“MainDataLabel”、typeof(string)、typeof(MainWindow)、new PropertyMetadata(“,新PropertyChangedCallback(OnSetTextChanged))


谢谢你,卡洛斯。成功了。我能再问一个问题吗?当我改变公私关系时,它不起作用。但在我按照你的指示添加getter和setter之后,它就成功了。我不明白为什么。你能给我一些这方面的信息或参考链接吗?我怎么做?我不习惯堆叠溢出系统。你刚刚做到了,伙计!这是因为绑定系统绑定到公共属性(那些具有getter和setter的属性)而不是字段,您可以尝试在数据绑定文章中搜索更多信息
  public string MainDataLabel{ 
     get { return (string)GetValue(SetTextProperty); } 
     set { SetValue(MainDataLabelProperty, value); } 
  }