2009-05-06 76 views
1

我试图使用数据绑定将数据绑定到Silverlight工具包图表。 我会有一套到多套系列,所以无法确定我需要多少系列。 我也想坚持一个数据绑定模型,而不是诉诸以编程方式添加这些系列,因为许多其他控件绑定到此数据源。如何将多个系列数据绑定到Silverilght工具包图表

我在网上发现了一篇由Jeremiah Morrill发表的文章,该文章展示了针对这个问题的解决方案。

Jeremiah's solution

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

在从耶利米的解决方案我ChartHelper,我有以下依赖属性

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

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

所以问题如下:

  • 我怎样才能捕捉到这种解决方案的PropertyChanged通知?
  • 有什么我可以添加到上面的DependencyProperty来捕获这个?
  • 这是我需要添加到图表或系列来实现的吗?

我一直在货架我的脑子在这几天,所以任何帮助或建议,我们将不胜感激

谢谢!

+0

我已经发布了的CodePlex问题追踪样品溶液,概述了问题 http://silverlight.codeplex.com/WorkItem/View.aspx?WorkItemId=2973 – WebDude 2009-05-07 07:03:22

回答

0

我从来没有找到一个解决这个问题,结束了使用从visifire

图表控件我发现这很容易定制,但从来没有发现使用数据绑定来实现这一目标的一个非常简洁的方式,结束了一个更多的程序化方法。

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) 
{ 
} 
相关问题