прежде всего я описываю свою цель, которую хочу достичь. Я хочу визуализировать непрерывный поток данных (максимум 1000 значений в секунду, но можно уменьшить). Этот поток данных следует визуализировать в виде диаграммы - точнее, это, помимо прочего, визуализация ЭКГ. Этот поток данных следует визуализировать как ...
прежде всего я описываю свою цель, которую хочу достичь. Я хочу визуализировать непрерывный поток данных (максимум 1000 значений в секунду, но можно уменьшить). Этот поток данных следует визуализировать в виде диаграммы - точнее, это, помимо прочего, визуализация ЭКГ. Этот поток данных следует визуализировать как ...
прежде всего я описываю свою цель, которую хочу достичь. Я хочу визуализировать непрерывный поток данных (максимум 1000 значений в секунду, но можно уменьшить). Этот поток данных следует визуализировать в виде диаграммы - точнее, это, помимо прочего, визуализация ЭКГ.
Моя первая идея заключалась в использовании ломаной линии и привязке ее к коллекции точек. Проблема здесь в том, что в пользовательском интерфейсе ничего не отображается. Возможно, это неправильный подход к этой задаче. Приветствуются лучшие идеи. Вот мой код. Сначала вид:
<Canvas>
<Polyline Points="{Binding Points}" Stroke="Red" StrokeThickness="2" />
</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 };
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. Кто-нибудь может сказать мне, что не так с этой привязкой? Что нужно сделать для непрерывного обновления представления при появлении новых значений? [Обновленная новая версия] Вид:
<Window.Resources>
<my:PointCollectionConverter x:Key="myPointsConverter"/>
</Window.Resources>
<Grid Name="grid">
<Polyline x:Name="ekglineI" Points="{Binding Points, Converter={StaticResource myPointsConverter}}" Stroke="Red" StrokeThickness="2" />
<Button Content="Button" Click="button1_Click" />
</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 };
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; }
}
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, или есть еще одна возможность?