如何将多个系列数据绑定到Silverlight工具包图表

时间:2009-05-06 18:12:56

标签: silverlight charts toolkit

我正在尝试使用数据绑定将数据绑定到Silverlight工具包图表。 我会有一到多套系列,所以无法确定我手头需要多少系列。 我还想坚持使用数据绑定模型,而不是通过编程方式添加这些系列,因为许多其他控件都绑定到此数据源。

我在网上发现了一篇由Jeremiah Morrill撰写的文章,该文章展示了解决这个问题的方法。

Jeremiah's solution

现在这首先完美地工作,直到我在应用程序运行时尝试更新我的数据绑定的数据源值,这不会反映出来。好像它没有订阅PropertyChanged事件。 我甚至将相同的数据绑定到图表旁边的数据网格,并且每当我的数据绑定的数据源值发生变化时,datagrid会按预期更改。

在Jeremiah解决方案的ChartHelper中,我有以下依赖属性

public static readonly DependencyProperty SeriesSourceProperty =
        DependencyProperty.RegisterAttached("SeriesSource", 
                                            typeof(IEnumerable), 
                                            typeof(ChartHelper),
                                            new PropertyMetadata(SeriesSourceChanged));

我的应用程序启动时会调用SeriesSourceChanged事件。 但是,当我的DataBinding的数据源值发生更改时,不会再次调用它。

所以问题如下:

  • 如何使用此解决方案捕获PropertyChanged通知?
  • 我可以添加到上面的DependencyProperty来捕获它吗?
  • 是否需要添加到图表或系列中以实现此目的?

我已经在脑子里绞了几天,所以任何帮助或建议都会非常感激

谢谢!

2 个答案:

答案 0 :(得分:1)

SeriesSource类型应该是ObservableCollection而不是IEnumerable。然后你做这样的事情:

private static void SeriesSourceChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
    var sender = o as YourType;
    var newCollection = e.NewValue as ObservableCollection<DataSetViewModel>;
    if (newCollection != null)
    {
        newCollection.CollectionChanged += new NotifyCollectionChangedEventHandler(sender.OnCollectionChanged);
    }
}

private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
}

答案 1 :(得分:0)

我从未找到解决此问题的方法,最终使用visifire

中的图表控件

我发现这更容易定制,但从来没有找到一种使用数据绑定来实现这一目标的简洁方法,最终得到了一种更加专业化的方法。