2016-07-18 2 views
2

Я не знаю, как отображать некоторые точки, используя ObservableCollection. Это мой код:Динамический дисплей данных с ObservableCollection

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d3="http://research.microsoft.com/DynamicDataDisplay/1.0" 
    Title="MainWindow" Height="350" Width="525"> 

<Grid> 

    <d3:ChartPlotter x:Name="Plotter" Margin="100,5,0,0"> 
     <d3:LineGraph /> 
    </d3:ChartPlotter> 

    <Button x:Name="button" 
      Content="Load Graph" 
      HorizontalAlignment="Left" 
      Margin="10,35,0,0" 
      VerticalAlignment="Top" 
      Width="70" 
      Height="45" Click="button_Click"/> 

</Grid> 

public partial class MainWindow : Window 
{ 
    public ObservableCollection<Point> Data { get; set; } 

    public MainWindow() 
    { 
     InitializeComponent(); 

     Data = new ObservableCollection<Point>(); 
     Plotter.DataContext = this; 
    } 

    private void button_Click(object sender, RoutedEventArgs e) 
    { 
     double[] my_array = new double[10]; 

     for (int i = 0; i < my_array.Length; i++) 
     { 
      my_array[i] = Math.Sin(i); 
      Data.Add(new Point(i, my_array[i])); 
     } 
    } 
} 

Может кто-нибудь показать мне, как это сделать? Вероятно, мне нужно добавить что-то в XAML, например ItemsSource = «Data», но я не смог найти его. Спасибо.

+0

вы пытаетесь добавить это ListView? –

+0

Да, я так думаю :) –

ответ

2

Использование Plotter.AddLineGraph(Data);:

using Microsoft.Research.DynamicDataDisplay; 
using Microsoft.Research.DynamicDataDisplay.DataSources;  

private void button_Click(object sender, RoutedEventArgs e) 
      { 
       double[] my_array = new double[10]; 

       for (int i = 0; i < my_array.Length; i++) 
       { 
        my_array[i] = Math.Sin(i); 
        Data.Collection.Add(new Point(i, my_array[i])); 
       } 
       Plotter.AddLineGraph(Data); 
      } 

enter image description here

EDIT: Вот мой полный рабочий код, используя MVVM, так что вам не нужно использовать AddLineGraph:

XAML:

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    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:WpfApplication1" 
    xmlns:d3="http://research.microsoft.com/DynamicDataDisplay/1.0" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"> 
<Grid> 
    <d3:ChartPlotter> 
     <d3:LineGraph DataSource="{Binding Data}"></d3:LineGraph> 
    </d3:ChartPlotter> 
</Grid> 

CS:

public partial class MainWindow : Window 
    { 
     MyViewModel viewModel; 

     public MainWindow() 
     { 
      InitializeComponent(); 

      viewModel = new MyViewModel(); 
      DataContext = viewModel; 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      double[] my_array = new double[10]; 

      for (int i = 0; i < my_array.Length; i++) 
      { 
       my_array[i] = Math.Sin(i); 
       viewModel.Data.Collection.Add(new Point(i, my_array[i])); 
      } 
     } 
    } 

ViewModel:

using Microsoft.Research.DynamicDataDisplay.DataSources; 

public class MyViewModel 
    { 
     public ObservableDataSource<Point> Data { get; set; } 

     public MyViewModel() 
     { 
      Data = new ObservableDataSource<Point>(); 
     } 
    } 
+0

Data.Collection не существует, и в этом пакете NuGet у меня есть что-то вроде Plotter.AddLineChart (данные объекта). Используете ли вы другую версию d3? –

+0

Версия i have 0.3.0.0 – jsanalytics

+0

Да, есть v0.4.0. Я загрузил вашу версию с https://dynamicdatadisplay.codeplex.com/, но я не знал, что делать с этими папками (Sources, DynamicDadaDisplay, DDD.Coastline и т. Д.). Не могли бы вы рассказать мне, как добавить его в свой проект? –

0

Я не знаю имен, объявленные в XAML:

xmlns:d3="http://research.microsoft.com/DynamicDataDisplay/1.0" 

, но я могу добавить некоторые предложения. Убедитесь, что класс Point выставляет значения координат X и Y как общедоступные свойства. После этого вы должны убедиться, что элемент управления ChartPlotter поддерживает привязку XAML.

+0

Ну, я сделал это, используя диаграмму WPF Toolkit. Я почти уверен, что Очки в порядке. О втором: я нашел здесь: http://www.mesta-automation.com/real-time-line-charts-with-wpf-and-dynamic-data-display/, но проблема в том, что не каждый команда работает с моей версией d3 (например, plotter.AddLineGraph()). Моя добыча происходит из пакетов NuGet. Я тоже не так опытен, поэтому я спрашиваю. :) –