You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Charts.WPF库无法显示WPF图表,数据绑定异常问题求助

问题描述

我一直在尝试在WPF应用中显示基础图表,选用的Charts.WPF库相关文档极少,可在GitHub搜索仓库名mendonca-andre/Charts.WPF获取源码,也可在Nuget平台直接搜索Charts.WPF安装对应包。
每次搜索Charts.WPF时,搜索引擎都会默认返回所有支持WPF开发的图表库相关结果。目前我几乎完成配置,但不知道如何绑定该图表库可识别的数据,参考示例使用ObservableLists后仍未生效。

我的XAML代码如下:

<Window x:Class="Eartquake_Tracker.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:chart="clr-namespace:Charts.WPF.ChartControls;assembly=Charts.WPF"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:Eartquake_Tracker"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">

<Grid>
    <Grid.Resources>
        <local:BuildGraph x:Key="functions"/>
    </Grid.Resources>
    <Grid.DataContext>
        <Binding Source="{StaticResource functions}"/>
    </Grid.DataContext>

    <chart:ChartSeries SeriesTitle ="La Palma Quakes" Width="300" Height="300" ItemSource="{Binding Path=chartData}"/>
</Grid>

绑定类代码如下,目前使用简单线性数据测试显示效果:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Eartquake_Tracker
{
    class BuildGraph : System.Windows.Data.DataSourceProvider
    {
        public Dictionary<int, int> chart = new Dictionary<int, int>();

        public ObservableCollection<Dictionary<int, int>> chartData = new ObservableCollection<Dictionary<int, int>>();

        public BuildGraph()
        {
            chart.Add(0, 0);
            chart.Add(1, 1);
            chart.Add(2, 2);
            chart.Add(3, 3);
            chart.Add(4, 4);
            chart.Add(5, 5);

            chartData.Add(chart);
        }
    }
}

运行后图表无数据显示,我对WPF、数据绑定和图表相关开发熟悉度较低,寻求帮助。
运行效果截图

解决方案

你遇到的问题属于WPF绑定规则不熟悉 + 库数据源格式不匹配两个问题,修改如下即可正常显示:

  1. WPF数据绑定仅支持公共属性,不支持公共字段,你定义的chartData是字段,需要改为带get访问器的属性。
  2. Charts.WPF的ChartSeries.ItemSource要求传入元素为Charts.WPF.Models.DataPoint类型的集合,你当前使用嵌套Dictionary的格式无法被识别。
  3. 不需要额外继承DataSourceProvider,直接使用普通类即可。

修正后的绑定类代码

using Charts.WPF.Models;
using System.Collections.ObjectModel;

namespace Eartquake_Tracker
{
    class BuildGraph
    {
        // 改为属性,元素类型改为DataPoint
        public ObservableCollection<DataPoint> chartData { get; set; } = new ObservableCollection<DataPoint>();

        public BuildGraph()
        {
            // 直接添加DataPoint对象,分别指定X和Y值
            chartData.Add(new DataPoint(0, 0));
            chartData.Add(new DataPoint(1, 1));
            chartData.Add(new DataPoint(2, 2));
            chartData.Add(new DataPoint(3, 3));
            chartData.Add(new DataPoint(4, 4));
            chartData.Add(new DataPoint(5, 5));
        }
    }
}

可选XAML优化

可以显式指定图表类型,比如要显示折线图就添加SeriesType属性:

<chart:ChartSeries SeriesTitle ="La Palma Quakes" 
                   SeriesType="Charts.WPF.Enums.SeriesType.Line"
                   Width="300" Height="300" 
                   ItemSource="{Binding Path=chartData}"/>

如果要显示柱状图就把SeriesType改为Bar即可。


内容的提问来源于stack exchange,提问作者JMC0352

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:54:03