首页 > 解决方案 > 无法让我的图表出现在 Charts.WPF 中

问题描述

我一直试图让一个基本图表出现在我的 WPF 应用程序中。不幸的是,我选择进入这个兔子洞的图书馆碰巧只有很少的文档。我只能找到这个 GitHub 存储库:

https://github.com/mendonca-andre/Charts.WPF

这是 nuget 包: https ://www.nuget.org/packages/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()
        {
            //this.chartData = chartData;
            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 和绑定和图表不是很熟悉。谢谢您的帮助!

在此处输入图像描述

标签: wpfchartsdata-binding

解决方案


通过查看 git repo 中的示例,我设法让它工作。如果我是你,我会下载 repo 并玩一玩。有一个 generic.xaml 文件显示如何创建每种不同类型的图表。

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:charts="clr-namespace:Charts.WPF.ChartControls;assembly=Charts.WPF"
        xmlns:pieChart="clr-namespace:Charts.WPF.Core.PieChart;assembly=Charts.WPF"
        DataContext="{Binding RelativeSource={RelativeSource Self}}"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <pieChart:PieChart ChartTitle="Test" ChartSubTitle="Test" ChartLegendVisibility="Visible">
            <pieChart:PieChart.Series>
                <charts:ChartSeries
                                    SeriesTitle="Test"
                                    DisplayMember="Text"
                                    ValueMember="Value"
                                    ItemsSource="{Binding Path=chart}">
                </charts:ChartSeries>
            </pieChart:PieChart.Series>
        </pieChart:PieChart>
    </Grid>
</Window>

如果你使用你的Windowas 会更容易DataContext

public partial class MainWindow : Window
{
    public Dictionary<int, int> chart { get; set; } = new Dictionary<int, int>();

    public MainWindow()
    {
        chart.Add(1, 1);
        chart.Add(2, 2);
        chart.Add(3, 3);

        InitializeComponent();
    }
}

请注意,只有在调用InitializeComponent. 这是因为Dictionary不可观察,即添加或删除项目时不会通知您的视图。

希望这足以让您研究其他类型的图表。


推荐阅读