прежде всего я опишу свою цель, которую хочу достичь.Я хочу визуализировать непрерывный поток данных (максимум 1000 значений в секунду, но его можно уменьшить).Этот поток данных должен быть визуализирован в виде диаграммы - если быть более точным, это, среди прочего, визуализация ЭКГ.Моей первой идеей было использование полилинии и связывание ее с коллекцией точек.Проблема в том, что на интерфейсе ничего не отображается.Возможно, это неправильный подход к этой задаче.Лучшие идеи приветствуются.Вот мой код до сих пор.Сначала представление:
<code><Canvas></code>
<code><Polyline Points="{Binding Points}" Stroke="Red" StrokeThickness="2" /></code>
<code></Canvas>
Ради простоты я использую код, хотя я использую MVVM-шаблон.Это также причина, почему я хочу использовать привязку, а не просто имя полилинии и добавить значения.
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>
<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; }
}
} Я знаю, что это не хороший стиль кодирования, но для первых тестов мне этого достаточно.Я использую данные массива для значений x и data1 для значений y.Может кто-нибудь сказать мне, что не так с этим связыванием?Что нужно сделать для постоянного обновления представления при появлении новых значений?
Заранее спасибо за помощь.
[Обновленная новая версия] Представление:
<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>
Код, который рисует ломаную линию при запуске и позже при нажатии кнопки.
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>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"));
}
Теперь я хочу избавиться от этой строки: grid.DataContext = this;
, чтобы я мог использовать свой MVVM или есть другая возможность?