我正在 CS 文件中的函数中创建 BubbleSeries 。作为一个数据源,我使用List<Dictionary<string,string>> GridData
,不幸的是我的实现引发了异常:No suitable axis is available for plotting the dependent value.
我是SL4新手,我无法弄清楚什么可能是共鸣。以下是我创建 BubbleSeries 并将其添加到 Chart 的方法:
List<Dictionary<string,string>> GridData = getGridData();
var s1 = new BubbleSeries();
s1.DependentValueBinding = new Binding("[" + <key to numeric value in DataGrid> + "]");
s1.SizeValueBinding = new Binding("[" + <key to numeric value in DataGrid> + "]");
s1.IndependentValueBinding = new Binding("[" + <key to string value in DataGrid> + "]");
s1.ItemsSource = GridData;
s1.Title = "Chart";
// add BubbleSeries to Chart
ChartVis.Series.Add(s1);
以下是我在运行时遇到的错误的完整描述:
Webpage error details
User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)
Timestamp: Mon, 20 Sep 2010 07:09:33 UTC
Message: Unhandled Error in Silverlight Application
Code: 4004
Category: ManagedRuntimeError
Message: System.InvalidOperationException: No suitable axis is available for plotting the dependent value.
at System.Windows.Controls.DataVisualization.Charting.BubbleSeries.<>c__DisplayClass6.<GetAxes>b__3()
at System.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.GetAxes(DataPoint firstDataPoint, Func`2 independentAxisPredicate, Func`1 independentAxisFactory, Func`2 dependentAxisPredicate, Func`1 dependentAxisFactory)
at System.Windows.Controls.DataVisualization.Charting.BubbleSeries.GetAxes(DataPoint firstDataPoint)
at System.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.GetAxes()
at System.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.OnDataPointsChanged(IList`1 newDataPoints, IList`1 oldDataPoints)
at System.Windows.Controls.DataVisualization.Charting.DataPointSingleSeriesWithAxes.OnDataPointsChanged(IList`1 newDataPoints, IList`1 oldDataPoints)
at System.Windows.Controls.DataVisualization.Charting.DataPointSeries.LoadDataPoints(IEnumerable newItems, IEnumerable oldItems)
at System.Windows.Controls.DataVisualization.Charting.DataPointSeries.Refresh()
at System.Windows.Controls.DataVisualization.Charting.DataPointSeries.OnSizeChanged(Object sender, SizeChangedEventArgs e)
at System.Windows.FrameworkElement.OnSizeChanged(Object sender, SizeChangedEventArgs e)
at MS.Internal.JoltHelper.RaiseEvent(IntPtr target, UInt32 eventId, IntPtr coreEventArgs, UInt32 eventArgsTypeIndex)
Line: 56
Char: 13
Code: 0
URI: http://localhost:49402/MyTestPage.aspx
我的图表实施是:
<toolkit:Chart Title="Visaulization" Grid.Column="0" x:Name="ChartVis">
<toolkit:Chart.Series>
</toolkit:Chart.Series>
</toolkit:Chart>
更新
将我的字典声明更改为Dictionary<string,object>
后,将数值设置为双精度数。我收到了这个错误:
Message: Unhandled Error in Silverlight Application
Code: 4004
Category: ManagedRuntimeError
Message: System.InvalidOperationException: Assigned dependent axis cannot be used. This may be due to an unset Orientation property for the axis or a type mismatch between the values being plotted and those supported by the axis.
at System.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.GetAxes(DataPoint firstDataPoint, Func`2 independentAxisPredicate, Func`1 independentAxisFactory, Func`2 dependentAxisPredicate, Func`1 dependentAxisFactory)
at System.Windows.Controls.DataVisualization.Charting.BubbleSeries.GetAxes(DataPoint firstDataPoint)
at System.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.GetAxes()
at System.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.OnDataPointsChanged(IList`1 newDataPoints, IList`1 oldDataPoints)
at System.Windows.Controls.DataVisualization.Charting.DataPointSingleSeriesWithAxes.OnDataPointsChanged(IList`1 newDataPoints, IList`1 oldDataPoints)
at System.Windows.Controls.DataVisualization.Charting.DataPointSeries.LoadDataPoints(IEnumerable newItems, IEnumerable oldItems)
at System.Windows.Controls.DataVisualization.Charting.DataPointSeries.Refresh()
at System.Windows.Controls.DataVisualization.Charting.DataPointSeries.OnSizeChanged(Object sender, SizeChangedEventArgs e)
at System.Windows.FrameworkElement.OnSizeChanged(Object sender, SizeChangedEventArgs e)
at MS.Internal.JoltHelper.RaiseEvent(IntPtr target, UInt32 eventId, IntPtr coreEventArgs, UInt32 eventArgsTypeIndex)
答案 0 :(得分:1)
修改getGridData
以返回List<Dictionary<string, object>>
并确保使用数字类型(例如int
或double
)将数字值添加到词典中。
修改强>
使用具体示例可能更容易,这里有一些测试代码: -
public partial class BubbleTest : UserControl
{
public BubbleTest()
{
InitializeComponent();
Loaded += new RoutedEventHandler(BubbleTest_Loaded);
}
void BubbleTest_Loaded(object sender, RoutedEventArgs e)
{
var s1 = new BubbleSeries();
s1.DependentValueBinding = new Binding("[dependent]");
s1.SizeValueBinding = new Binding("[size]");
s1.IndependentValueBinding = new Binding("[independent]");
s1.ItemsSource = GetGridData();
s1.Title = "Chart";
ChartVis.Series.Add(s1);
}
private List<Dictionary<string, object>> GetGridData()
{
List<Dictionary<string, object>> gridData = new List<Dictionary<string, object>>();
gridData.Add(CreateBubbleEntry("First", 10.0, 5.0));
gridData.Add(CreateBubbleEntry("Second", 20.0, 10.0));
return gridData;
}
private Dictionary<string, object> CreateBubbleEntry(string independent, double dependent, double size)
{
var item = new Dictionary<string, object>();
item.Add("independent", independent);
item.Add("dependent", dependent);
item.Add("size", size);
return item;
}
}
此用户控件的Xaml与您一样: -
<UserControl x:Class="SilverlightApplication1.BubbleTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"
>
<Grid x:Name="LayoutRoot" Background="White">
<toolkit:Chart Title="Visaulization" Grid.Column="0" x:Name="ChartVis">
<toolkit:Chart.Series>
</toolkit:Chart.Series>
</toolkit:Chart>
</Grid>
</UserControl>
以上是有效的,所以无论你实际做什么都会有所不同。