如何将我的LINQ查询结果(放入字典中)绑定到WPF中的图表?

时间:2011-12-27 20:14:47

标签: c# wpf linq charts todictionary

好的,所以我只是在wpf中练习一些非常基本的图表。我对linq和wpf相当新,所以如果这是一个愚蠢的问题,我会提前道歉。我有我的LINQ to实体查询返回所有列,我想选择两个列(Month(string),Points(int))将它们抛入字典,然后将其绑定到我的图表..

这是我的XAML ::

<Window x:Class="Chart.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:DV="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit"
    xmlns:DVC="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <DVC:Chart Name="testchart" Title="Statistics" Width="500" Height="300" LegendTitle="Stats">
        <DVC:Chart.Series>
            <DVC:BarSeries Title="Points"
                           IndependentValueBinding=""
                           DependentValueBinding="">
            </DVC:BarSeries>
        </DVC:Chart.Series>
    </DVC:Chart>
</Grid>

这是背后的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Controls.DataVisualization.Charting;

namespace Chart
{

public partial class MainWindow : Window
{
    Dictionary<string, int> _data = new Dictionary<string, int>();

    public MainWindow()
    {
        InitializeComponent();
        using (CE ctx = new CE())
        {
            var query = (from r in ctx.ChartOnes
                           select r).ToDictionary(k => k.Month);
        }


    }

}
}

感谢Dessus及时回复!我今天会讨论你的建议。昨天我确实得到了一位同事的帮助,他能够告诉我如何让它发挥作用。以下是编辑过的代码段:

        <DVC:Chart Name="testchart" Title="Statistics" Width="500" Height="300" LegendTitle="Stats">
        <DVC:Chart.Series>
                <DVC:ColumnSeries Title="Points"
                           IndependentValueBinding="{Binding Path=Key}"
                           DependentValueBinding="{Binding Path=Value.Points}">
                </DVC:ColumnSeries>
            </DVC:Chart.Series>
    </DVC:Chart>

和代码隐藏:

        private void LoadBarChartData()
    {
        CE ctx = new CE();

        var query = (from r in ctx.ChartOnes
                     select new { Points = r.Points, Month = r.Month }).ToDictionary(k => k.Month);

        ((ColumnSeries)testchart.Series[0]).ItemsSource  = query;
    }

1 个答案:

答案 0 :(得分:0)

您应该查看模型视图视图模型(MVVM)示例,了解如何在WPF中进行数据绑定以获取图表控件(请参阅:http://geekswithblogs.net/BillSontag/archive/2009/10/31/wpf-2-way-data-binding.aspx)。你在后面的代码中进行查询的方式将使得获取对你的控件的引用变得烦人(但可以工作),但是一旦你使它工作并习惯它,MVVM将使生活更轻松。您的Linq查询看起来应该输出到数据表而不是字典。

备注:对基础LINQ集合的任何更新都不会触发图表控件中的更新。为此你需要:http://bindablelinq.codeplex.com/