我有一个像这样创建的LineChart:
<Grid.Resources>
<local:EngineMeasurementCollection x:Key="EngineMeasurementCollection"/>
</Grid.Resources>
<charting:Chart x:Name="ahorasi" Title="Engine Performance" Margin="-2,0,384,0">
<!-- Power curve -->
<charting:LineSeries
Title="Power"
ItemsSource="{StaticResource EngineMeasurementCollection}"
IndependentValueBinding="{Binding Speed}"
DependentValueBinding="{Binding Power}"
>
<!-- Vertical axis for power curve -->
<charting:LineSeries.DependentRangeAxis>
<charting:LinearAxis
Orientation="Y"
Title="Power (hp)"
Minimum="0"
Maximum="250"
Interval="50"
ShowGridLines="True"/>
</charting:LineSeries.DependentRangeAxis>
</charting:LineSeries>
<!-- Torque curve -->
<charting:LineSeries
Title="Torque"
ItemsSource="{StaticResource EngineMeasurementCollection}"
IndependentValueBinding="{Binding Speed}"
DependentValueBinding="{Binding Torque}">
<!-- Vertical axis for torque curve -->
<charting:LineSeries.DependentRangeAxis>
<charting:LinearAxis
Orientation="Y"
Title="Torque (lb-ft)"
Minimum="50"
Maximum="300"
Interval="50"/>
</charting:LineSeries.DependentRangeAxis>
</charting:LineSeries>
<charting:Chart.Axes>
<!-- Shared horizontal axis -->
<charting:LinearAxis
Orientation="X"
Title="Speed (rpm)"
Interval="1000"
ShowGridLines="True"/>
</charting:Chart.Axes>
</charting:Chart>
然后我
public class EngineMeasurementCollection : ObservableCollection<EngineMeasurement>
{
public EngineMeasurementCollection()
{
Add(new EngineMeasurement { Speed = 1000, Torque = 100, Power = 20 });
Add(new EngineMeasurement { Speed = 2000, Torque = 160, Power = 60 });
Add(new EngineMeasurement { Speed = 3000, Torque = 210, Power = 125 });
Add(new EngineMeasurement { Speed = 4000, Torque = 220, Power = 160 });
Add(new EngineMeasurement { Speed = 5000, Torque = 215, Power = 205 });
Add(new EngineMeasurement { Speed = 6000, Torque = 200, Power = 225 });
Add(new EngineMeasurement { Speed = 7000, Torque = 170, Power = 200});
}
}
public class EngineMeasurement
{
public int Speed { get; set; }
public int Torque { get; set; }
public int Power { get; set; }
}`
当我运行我的项目时,图表工作正常,显示在构造函数中创建的值,但是这是硬编码的,我无法找到添加或删除元素的方式来更新图表。
我甚至不理解为什么图表显示构造函数中提供的项目,是否创建了EngineMeasurementCollection的实例?自动?我没有创建新的EngineMeasurementCollection。
我尝试过类似的事情:
EngineMeasurement littleitem = new EngineMeasurement();
EngineMeasurementCollection fullitems = new EngineMeasurementCollection();
littleitem.Power = 10;
littleitem.Speed = 1000;
littleitem.Torque = 50;
fullitems.Add(littleitem);
//Up to this point everything works perfect, now I want to update my chart with fullitem values in whatever possible way.
我不能做ahorasi.ItemsSource = fullitems因为.ItemsSource不存在,我真的很困惑因为,图表在刚创建时效果很好,带有硬编码值,我认为更新它必须只是一步,但是无法找到。
答案 0 :(得分:0)
Xaml中的这一行: -
<local:EngineMeasurementCollection x:Key="EngineMeasurementCollection"/>
正在为EngineMeasurementCollection
创建一个实例,并且这个实例是你的图表绑定的。
因此,如果您想在图表中添加新元素,则需要修改此实例。假设Grid
这是一个名为“LayoutRoot”的资源,您可以通过向UserControl
添加此属性来访问该集合: -
public EngineMeasurementCollection CurrentMeasurements
{
get { return (EngineMeasurementCollection)LayoutRoot.Resources["EngineMeasurementCollection"]; }
}
现在添加一个附加条目: -
CurrentMeasurements.Add(new EngineMeasurement() { Power = 10, Speed = 1000, Torque = 50 } );
答案 1 :(得分:0)
我的特殊问题已经解决,但对于其他读者来说,我的UserControl页面与我用于图表的页面不同,所以我添加了
public EngineMeasurementCollection CurrentMeasurements
到我的图表页面,它工作得很完美,不知道是否有任何涉及代码的含义。