2011-08-17 12 views
6

मैं सी # में एक जीयूआई विकसित कर रहा हूं। डब्ल्यूपीएफ के तहत। वास्तव में एम्बेडेड डिवाइस के साथ सीरियल संचार के लिए यह एक एप्लीकेशन है, मैं बार-बार प्राप्त डेटा के साथ एक लाइन चार्ट दिखाना चाहता हूं। और मुझे भी चाहिए उन चार्टों को सहेजने के लिए एक विकल्प प्रदान करें और इसे प्रिंट करने का विकल्प दें। मैं मुफ्त पुस्तकालयों या सॉफ्टवेयर के समर्थन के साथ यह गतिशील रूप से कैसे आकर्षित कर सकता हूं?सी # डब्ल्यूपीएफ अनुप्रयोग में डायनामिक लाइन चार्ट

उत्तर

9

मैं अपने सभी WPF चार्टिंग आवश्यकताओं के लिए Dynamic Data Display का उपयोग करता हूं। यह चार्ट को बचाने में सहायता करता है, बहुत तेज़ है, निर्बाध ज़ूमिंग और पैनिंग प्रदान करता है। नाम स्थान: xmlns: D3 = "http://research.microsoft.com/DynamicDataDisplay/1.0"

XAML:

<d3:ChartPlotter Name="plotter" Background="White"> 
    <d3:ChartPlotter.Resources> 
     <conv:Date2AxisConverter x:Key="Date2AxisConverter"/> 
    </d3:ChartPlotter.Resources> 
    <d3:ChartPlotter.HorizontalAxis> 
     <d3:HorizontalDateTimeAxis Name="dateAxis"/> 
    </d3:ChartPlotter.HorizontalAxis> 
    <d3:Header Content="{Binding PlotHeader}"/> 
    <d3:VerticalAxisTitle Content="Value"/> 
    <d3:HorizontalAxisTitle Content="Date"/> 
</d3:ChartPlotter> 

सी # कोड: कन्वर्टर इस्तेमाल किया

public class Date2AxisConverter : IValueConverter 
{ 
    #region IValueConverter Members 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is DateTime && targetType == typeof(double)) 
     { 
      return ((DateTime)value).Ticks/10000000000.0; 
      // See constructor of class Microsoft.Research.DynamicDataDisplay.Charts.DateTimeAxis 
      // File: DynamicDataDisplay.Charts.Axes.DateTime.DateTimeAxis.cs 

      // alternatively, see the internal class Microsoft.Research.DynamicDataDisplay.Charts.DateTimeToDoubleConversion 

     } 
     return null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     // try Microsoft.Research.DynamicDataDisplay.Charts.DateTimeAxis.DoubleToDate 
     throw new NotSupportedException(); 
    } 

    #endregion 
} 

सी # कोड: क्लियरिंग ग्राफ और लाइन ग्राफ़ बनाना, यहां मेरा स्टॉकस्टिक प्रोसेसपॉइंट एक क्षेत्र "डेटटाइम टी" और एक फ़ील्ड "डबल वैल्यू" वाला एक संरचना है।

using Microsoft.Research.DynamicDataDisplay; 
using System.Collections.ObjectModel; 
using Microsoft.Research.DynamicDataDisplay.DataSources; 

public void ClearLines() 
{ 
    var lgc = new Collection<IPlotterElement>(); 
    foreach (var x in plotter.Children) 
    { 
     if (x is LineGraph || x is ElementMarkerPointsGraph) 
      lgc.Add(x); 
    } 

    foreach (var x in lgc) 
    { 
     plotter.Children.Remove(x); 
    } 
} 

internal void SendToGraph() { 

    IPointDataSource _eds = null; 
    LineGraph line; 

    ClearLines(); 

    EnumerableDataSource<StochasticProcessPoint> _edsSPP; 
    _edsSPP = new EnumerableDataSource<StochasticProcessPoint>(myListOfStochasticProcessPoints); 
    _edsSPP.SetXMapping(p => dateAxis.ConvertToDouble(p.t)); 
    _edsSPP.SetYMapping(p => p.value); 
    _eds = _edsSPP; 

    line = new LineGraph(_eds); 
    line.LinePen = new Pen(Brushes.Black, 2); 
    line.Description = new PenDescription(Description); 
    plotter.Children.Add(line); 
    plotter.FitToView(); 
} 

इसके साथ, आप WPF में एक चार्ट प्लॉट करने में सक्षम होना चाहिए। धारावाहिक बंदरगाह से वापस आने पर डेटा जोड़ना कोई समस्या नहीं होनी चाहिए। आप डायनामिकडेटा डिस्प्ले से बाध्यकारी उदाहरण भी देख सकते हैं।

+0

मैं कैसे जोड़ सकता हूँ कि मेरा परियोजना के लिए पुस्तकालय फ़ाइलें इसे डाउनलोड किया है कि क्या मैं सभी .dll फ़ाइलें जोड़ने के लिए – Mukthi

+0

आप दृश्य स्टूडियो में करते हैं, इस परियोजना के संदर्भ फ़ोल्डर पर है -> संदर्भ जोड़ें। अपनी परियोजना में DynamicDataDisplay.dll जोड़ें। किसी अन्य बाहरी संदर्भ के समान। – NetSquirrel

+2

की जाँच करें: https://github.com/apoydence/DynamicDataDisplay और https://www.nuget.org/packages/DynamicDataDisplay/ स्रोत कोड के लिए और स्थापित nuget। – Andrew

संबंधित मुद्दे