WPF - OxyPlot - 绑定到数据点
WPF - OxyPlot - Binding to DataPoints
我正在开发一个使用 OxyPlot.
的 WPF 应用程序
我已经按照这个例子做了。我正在使用以下 XAML:
成功绘制图表
<oxy:Plot Height="640" HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch">
<oxy:Plot.Series>
<oxy:LineSeries ItemsSource="{Binding ResultSet1}" />
<oxy:LineSeries ItemsSource="{Binding ResultSet2}" />
<oxy:LineSeries ItemsSource="{Binding ResultSet3}" />
</oxy:Plot.Series>
</oxy:Plot>
我的 ViewModel 看起来像这样:
public class MyViewModel
{
public IList<DataPoint> ResultSet1 { get; set; }
public IList<DataPoint> ResultSet2 { get; set; }
public IList<DataPoint> ResultSet3 { get; set; }
public void Load()
{
this.ResultSet1 = new List<DataPoint>
{
new DataPoint(0, 4),
new DataPoint(40, 12),
new DataPoint(50, 12)
};
this.ResultSet2 = new List<DataPoint>
{
new DataPoint(-0.4, 3),
new DataPoint(8, 12),
new DataPoint(48, 11)
};
this.ResultSet3 = new List<DataPoint>
{
new DataPoint(2, 5),
new DataPoint(12, 14),
new DataPoint(52, 13)
};
}
public void Refresh()
{
this.ResultSet1 = new List<DataPoint>();
this.ResultSet2 = new List<DataPoint>();
this.ResultSet3 = new List<DataPoint>();
System.Windows.MessageBox.Show("should be empty");
}
}
在我的代码中,我有一个 "Refresh" 按钮。当用户单击它时,我正在尝试刷新显示的数据。然而,结果似乎没有在 UI 中更新。我添加了上面显示的 MessageBox
,以确保我实际上进入了 Refresh
方法。出现该消息框。所以,在这一点上,我知道:
a) OxyPlot 图表正在运行,因为我的硬编码初始结果集值显示正常。
b) 我已经成功连接了视图模型。
c) 我正在进入 Refresh
方法。
我只是不确定为什么图表上的点似乎并不令人耳目一新。任何见解表示赞赏!
而不是使用 IList
使用 ObservableCollection
public ObservableCollection<DataPoint> ResultSet1 { get; set; }
public ObservableCollection<DataPoint> ResultSet2 { get; set; }
public ObservableCollection<DataPoint> ResultSet3 { get; set; }
而不是使用 new IList<T>()
使用
ResultSet1.Clear();
ResultSet2.Clear();
ResultSet3.Clear();
我正在开发一个使用 OxyPlot.
的 WPF 应用程序我已经按照这个例子做了。我正在使用以下 XAML:
成功绘制图表<oxy:Plot Height="640" HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch">
<oxy:Plot.Series>
<oxy:LineSeries ItemsSource="{Binding ResultSet1}" />
<oxy:LineSeries ItemsSource="{Binding ResultSet2}" />
<oxy:LineSeries ItemsSource="{Binding ResultSet3}" />
</oxy:Plot.Series>
</oxy:Plot>
我的 ViewModel 看起来像这样:
public class MyViewModel
{
public IList<DataPoint> ResultSet1 { get; set; }
public IList<DataPoint> ResultSet2 { get; set; }
public IList<DataPoint> ResultSet3 { get; set; }
public void Load()
{
this.ResultSet1 = new List<DataPoint>
{
new DataPoint(0, 4),
new DataPoint(40, 12),
new DataPoint(50, 12)
};
this.ResultSet2 = new List<DataPoint>
{
new DataPoint(-0.4, 3),
new DataPoint(8, 12),
new DataPoint(48, 11)
};
this.ResultSet3 = new List<DataPoint>
{
new DataPoint(2, 5),
new DataPoint(12, 14),
new DataPoint(52, 13)
};
}
public void Refresh()
{
this.ResultSet1 = new List<DataPoint>();
this.ResultSet2 = new List<DataPoint>();
this.ResultSet3 = new List<DataPoint>();
System.Windows.MessageBox.Show("should be empty");
}
}
在我的代码中,我有一个 "Refresh" 按钮。当用户单击它时,我正在尝试刷新显示的数据。然而,结果似乎没有在 UI 中更新。我添加了上面显示的 MessageBox
,以确保我实际上进入了 Refresh
方法。出现该消息框。所以,在这一点上,我知道:
a) OxyPlot 图表正在运行,因为我的硬编码初始结果集值显示正常。
b) 我已经成功连接了视图模型。
c) 我正在进入 Refresh
方法。
我只是不确定为什么图表上的点似乎并不令人耳目一新。任何见解表示赞赏!
而不是使用 IList
使用 ObservableCollection
public ObservableCollection<DataPoint> ResultSet1 { get; set; }
public ObservableCollection<DataPoint> ResultSet2 { get; set; }
public ObservableCollection<DataPoint> ResultSet3 { get; set; }
而不是使用 new IList<T>()
使用
ResultSet1.Clear();
ResultSet2.Clear();
ResultSet3.Clear();