如何在SL4中实用地创建BubbleSeries

时间:2010-09-20 07:20:26

标签: silverlight silverlight-4.0 silverlight-toolkit runtime-error

我正在 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)     

1 个答案:

答案 0 :(得分:1)

修改getGridData以返回List<Dictionary<string, object>>并确保使用数字类型(例如intdouble)将数字值添加到词典中。

修改

使用具体示例可能更容易,这里有一些测试代码: -

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>

以上是有效的,所以无论你实际做什么都会有所不同。