Как связать результаты моего запроса LINQ (помещенные в словарь) с диаграммой в WPF? - PullRequest
0 голосов
/ 28 декабря 2011

Хорошо, так что я просто практикую то, что, вероятно, очень простой материал с диаграммами в wpf.Я довольно новичок в linq и wpf, поэтому заранее прошу прощения, если это глупый вопрос.У меня есть запрос LINQ to entity, возвращающий все столбцы, я хочу выбрать два из столбцов (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 голосов
/ 28 декабря 2011

Вы должны посмотреть пример представления модели модели (MVVM), как выполнить привязку данных в WPF для элементов управления диаграммой (см .: http://geekswithblogs.net/BillSontag/archive/2009/10/31/wpf-2-way-data-binding.aspx). То, как вы выполняете свой запрос в коде, сделает его раздражающим. (но может работать), чтобы получить ссылку на ваш элемент управления, но MVVM облегчит жизнь, как только вы получите его и привыкнете к нему. Ваш запрос Linq выглядит так, как будто он должен выводить данные, а не словарь.

Примечание. Любые обновления базовых коллекций LINQ не будут запускать обновления в вашем элементе управления диаграммы. Для этого вам понадобится что-то вроде: http://bindablelinq.codeplex.com/

...