我遵循了本教程中的示例:但不幸的是,他们的文档太模糊了,我无法让任何东西正常工作。
http://www.visiblox.com/blog/posts/2011/06/13/data-binding-with-visiblox-charts/#asg
我正在尝试做的是使用AutoSeriesGenerator自动为我创建一个新的系列,并将该系列添加到主Y轴。我希望你们中的一些人对Visiblox有一个很好的体验。以下是我认为他们的示例应该如何在C#中表示:
<local:WeatherStationsData x:Key="dataCollection">
<local:WeatherStationTemperature>
<local:HourTemperature Hour="1" Temperature="10" />
<local:HourTemperature Hour="2" Temperature="14" />
</local:WeatherStationTemperature>
<local:WeatherStationTemperature>
<local:HourTemperature Hour="1" Temperature="20" />
<local:HourTemperature Hour="2" Temperature="19" />
</local:WeatherStationTemperature>
</local:WeatherStationsData>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<charts:Chart x:Name="Chart"
charts:AutoSeriesGenerator.XValuePath="Hour"
charts:AutoSeriesGenerator.YValuePath="Temperature"
charts:AutoSeriesGenerator.ChartSeriesProvider="LineSeries"
charts:AutoSeriesGenerator.ItemsSource="{StaticResource dataCollection}">
<charts:Chart.XAxis>
<charts:LinearAxis />
</charts:Chart.XAxis>
<charts:Chart.YAxis>
<charts:LinearAxis />
</charts:Chart.YAxis>
</charts:Chart>
//X and Y points
public class ChartDataPoint
{
public DateTime X { get; set; }
public float Y { get; set; }
public ChartDataPoint(DateTime X, float Y)
{
this.X = X;
this.Y = Y;
}
}
//represents a dataseries - collection of datapoints
public class DataPointsCollection : ObservableCollection<ChartDataPoint>
{
}
//the "dataseries"
public class DataSeries : ObservableCollection<DataPointsCollection>
{
}
But it isn't working as expected.
public IChartSeries CreateSeries(object targetParent, object boundObject)
{
LineSeries lineSeries = null;
if (targetParent is LineSeries)
{
lineSeries = new LineSeries();
lineSeries.YAxis = new LinearAxis();
AxisCollection.Add(lineSeries.YAxis);
}
return lineSeries;
}他们的文档说targetObject是IChartSeries所围绕的业务对象。但是我得到的是一个集合,而不是对象!该方法总是被多次调用,这意味着它会生成大量的行序列。我尝试过CollectionChanged事件,也遇到了同样的问题。它不会被调用一次,而是被多次调用,这对我来说是没有意义的。
我怎么才能解决这个问题,谢谢。
发布于 2012-07-04 23:44:02
这很尴尬,因为我整天都在纠结这个问题。当我发布一个问题,然后在几分钟后设法解决它时,我讨厌它:O。
我决定试一下,它起作用了--非常慢!
在你的代码中:
private void Series_CollectionChanged(object sender,
NotifyCollectionChangedEventArgs e)
{
if(e.Action == NotifyCollectionChangedAction.Add)
{
var lineSeries = (LineSeries) MultiChart.Series[e.NewStartingIndex];
if (!collection.Contains(lineSeries.YAxis))
{
lineSeries.YAxis = new LinearAxis();
collection.Add(lineSeries.YAxis);
}
}
else if(e.Action == NotifyCollectionChangedAction.Reset )
{
collection.Clear();
}
}在你的CustomLineSeries或其他什么地方:
public IChartSeries CreateSeries(object targetParent, object boundObject)
{
if (boundObject is DataPointsCollection)
{
LineSeries lineSeries = new LineSeries();
return lineSeries;
}
return null;
}我应该确保边界对象是一个业务对象并且是一个数据对象!
https://stackoverflow.com/questions/11331359
复制相似问题