2011-12-27 1 views
0

Итак, я просто занимаюсь тем, что, вероятно, является очень простым материалом с диаграммами в wpf. Я довольно новичок в linq и wpf, поэтому заранее извиняюсь, если это глупый вопрос. У меня есть LINQ для запроса сущности, возвращающего все столбцы, я хочу выбрать два из столбцов (месяц (строка), точки (int)), бросить их в словарь, а затем привязать их к моей диаграмме.Как связать результаты запроса LINQ (помещать в словарь) в диаграмму в WPF?

Вот мой 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; 
    } 

ответ

0

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

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

+0

Спасибо! Пример MVVM был очень простым и понятным. – ledgeJumper

 Смежные вопросы

  • Нет связанных вопросов^_^