Polyline usando DataBinding y PointCollection para una actualización continua


En primer lugar describo mi objetivo que quiero lograr. Quiero visualizar un flujo continuo de datos (máximo 1000 valores por segundo, pero podría reducirse). Este flujo de datos debe visualizarse como un gráfico; para ser más precisos, es una visualización de un ECG, entre otras cosas. Mi primera idea fue usar polilínea y vincularla a una colección de puntos. El problema aquí es que no se muestra nada en la interfaz de usuario. Quizás es un enfoque equivocado para esta tarea. Mejores ideas son bienvenidas. Aquí está mi código hasta ahora. Primero la vista:

 
<code><Canvas></code>
  <code><Polyline Points="{Binding Points}" Stroke="Red" StrokeThickness="2" /></code>
<code></Canvas></code>

En aras de la simplicidad, uso el código subyacente a pesar de que uso el patrón MVVM. Esa es también la razón por la que quiero usar el enlace y no solo el nombre de la polilínea y agregar los valores.


public partial class MainWindow : Window
{
   private short[] data = new short[]{ 10,30,50,70,90,110,130,150,170,190,210 };
   private short[] data1 = new short[] { 15,14,16,13,17,12,18,11,19,10,24 };<p></p>

<pre><code>    public MainWindow()
    {
        InitializeComponent();
        for (int i = 0; i < data.Length; i++)
        {
            Points.Add(new Point(data[i], data1[i]));
        }
    }

    private PointCollection _points = new PointCollection();
    public PointCollection Points
    {
        get { return _points; }
    }
</code></pre>

} I know that is no good coding style but for first tests its enough for me. I use array data for x-values and data1 for y-values. Can anyone tell me whats wrong with that binding? What's to be done for a continuous update of the view, whenever new values occur?
Thanks for your help in advance.

[Updated new version] The view:


<code><Window.Resources></code>
        <code><my:PointCollectionConverter x:Key="myPointsConverter"/></code>
<code></Window.Resources></code>
    <code><Grid Name="grid"></code>
        <code><Polyline x:Name="ekglineI" Points="{Binding Points, Converter={StaticResource myPointsConverter}}" Stroke="Red" StrokeThickness="2"  /></code>
        <code><Button Content="Button" Click="button1_Click" /></code>
<code></Grid></code>
The code-behind which draws a polyline on startup and later on when a button is clicked.

public partial class MainWindow : Window, INotifyPropertyChanged
    {
        private short[] data = new short[] { 10, 30, 50, 70, 90, 110, 130, 150, 170, 190, 210 };
        private short[] data2 = new short[] { 230, 250, 270, 290, 300, 310, 330, 350, 370, 390, 410 };
        private short[] data1 = new short[] { 15, 14, 16, 13, 17, 12, 18, 11, 19, 10, 24 };<p></p>

<p>public MainWindow()
        {
            InitializeComponent();
            grid.DataContext = this;
            for (int i = 0; i < data.Length; i++)
            {
                Points.Add(new Point(data[i], data1[i]));
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        private ObservableCollection _points = new ObservableCollection();
        public ObservableCollection Points
        {
            get { return _points; }
        }</p>

<pre><code>    private void button1_Click(object sender, RoutedEventArgs e)
    {
        for (int i = 0; i < data2.Length; i++)
        {
            Points.Add(new Point(data2[i], data1[i]));
        }
        PropertyChanged(this, new PropertyChangedEventArgs("Points"));
    }
</code></pre>

Now what I want to do is getting rid of this line: grid.DataContext = this; so that I can use my MVVM or is there another possibility?

Respuestas a la pregunta(3)

Su respuesta a la pregunta