Livecharts系列票据未在Cartesianchart上显示



修改网站文档中提供的代码后,我很难显示系列收集。让我告诉你我做了什么。

首先,XAML:

<Grid>
    <lvc:CartesianChart Series="{Binding GraphData.SeriesCollection}"
                    LegendLocation="Top">
        <lvc:CartesianChart.AxisY>
            <lvc:Axis Title="VIs"></lvc:Axis>
        </lvc:CartesianChart.AxisY>
        <lvc:CartesianChart.AxisX>
            <lvc:Axis Title="Players"></lvc:Axis>
        </lvc:CartesianChart.AxisX>
    </lvc:CartesianChart>
</Grid>

在我的ViewModel中,我有一个自定义对象存储我希望绑定到此图表的信息:

public GraphModel GraphData { get; set; } = new GraphModel();

我有一个按钮来测试我的代码。单击它执行以下代码:

private void UpdateGraphStatistics()
{
    var compdata = new List<double>();
    var dqdata = new List<double>();
    foreach (var item in Competitors)
    {
        if (!item.DQ)
        {
            compdata.Add(item.VIs);
        }
        else if (item.DQ)
        {
            dqdata.Add(item.VIs);
        }
    }
    GraphData = new GraphModel(compdata, dqdata);
}

出于所有意图和目的,以上代码添加了两个列表一系列双打,我确定这不是问题(所以这不是问题; seriescollection并不为空!(

接下来,GraphModel。这是问题所在的大问题,但我无法确定在哪里:

class GraphModel
{
    public ChartValues<ObservablePoint> CompetitionData = new ChartValues<ObservablePoint>();
    public ChartValues<ObservablePoint> DQData = new ChartValues<ObservablePoint>();
    public SeriesCollection SeriesCollection { get; set; }
    public GraphModel()
    {
        CreateSeriesCollection();
    }
    public GraphModel(List<double> competitionData, List<double> dqData)
    {
        ParseData(competitionData, dqData);
        CreateSeriesCollection();
    }
    private void CreateSeriesCollection()
    {
        SeriesCollection = new SeriesCollection
        {
            new LineSeries
            {
                Title = "Competition Data (VIs/Player Number)",
                Values = CompetitionData,
                LineSmoothness = 0.6,
                PointForeground = Brushes.Blue
            },
            new LineSeries
            {
                Title = "DQ Data (VIs/Player Number)",
                Values = DQData,
                LineSmoothness = 1,
                PointForeground = Brushes.Red
            }
        };
    }
    private void ParseData(List<double> compData, List<double> dqData)
    {
        // Convert competitionData into observable points
        int count = 1;
        foreach (var item in compData)
        {
            CompetitionData.Add(new ObservablePoint(count++, item));
        }

        // Convert dqdata into observable points
        int offsetX = CompetitionData.Count;
        foreach (var item in dqData)
        {
            DQData.Add(new ObservablePoint(offsetX++, item));
        }
    }
}

该方法ParseData()在非WPF代码之前已使用过,因此我知道这不太可能引起问题的原因。

我仍然没有解决问题。我不是正确地绑定数据吗?

编辑

对于上下文,我知道GraphModel中的串联汇编绝对包含我想要的信息,因为它应该是因为此代码与我最初试用的软件的非WPF版本或多或少相同。<<<<<<<<<<<<<<

我解决了自己的问题。问题是我每次要更新图形数据时都运行相同的方法(如上所示(:

private void UpdateGraphStatistics()
{
    var compdata = new List<double>();
    var dqdata = new List<double>();
    foreach (var item in Competitors)
    {
        if (!item.DQ)
        {
            compdata.Add(item.VIs);
        }
        else if (item.DQ)
        {
            dqdata.Add(item.VIs);
        }
    }
    GraphData = new GraphModel(compdata, dqdata);
}

此代码的问题是它创建了一个新对象,该对象实际上切断了视图与GraphData的绑定。

我有两个选项:不要创建一个新对象,或创建一个新对象,然后重新命令视图为对象。

因为我无法弄清楚如何重新命名视图,所以我选择了在对象中创建方法以修改数据的选项。我做到了:

public void ParseData(List<CompetitorModel> compData, List<CompetitorModel> dqData)
{
    CompetitionData.Clear();
    DQData.Clear();
    // Convert competitionData into observable points
    int count = 0;
    foreach (var item in compData)
    {
        CompetitionData.Add(new ObservablePoint(count++, item.VIs));
    }

    // Convert dqdata into observable points
    int offsetX = compData.Count;
    foreach (var item in dqData)
    {
        DQData.Add(new ObservablePoint(offsetX++, item.VIs));
    }
}

简而言之,我制作了涉及我对象中的数据pasrsing的代码部分,该pasrs在我的对象公开中,清除了内部的集合,并且构造了一个新的修改了现有的系列票据,该系列汇编仍然绑定到视图。,不通过更改CompetitionDataDQData收集来破坏绑定。

一旦我学习了如何重新启动数据,i 可以将此方法私有并创建一个新对象,但是我也在创建整个系列汇编(以及我内部的其他功能和其他东西现在的模型(每次(,因此该方法在理论上可能更快地。

相关内容

  • 没有找到相关文章