【问题标题】:How to databind Multiple Series to a Silverilght Toolkit Chart如何将多个系列数据绑定到 Silverilght 工具包图表
【发布时间】:2009-05-06 18:12:55
【问题描述】:

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

我在网上找到了 Jeremiah Morrill 的一篇文章,该文章展示了解决这个问题的方法。

Jeremiah's solution

现在这开始工作得很好,直到我尝试在应用程序运行时更新我的​​数据绑定的数据源值,这不会反映出来。好像它没有订阅 PropertyChanged 事件。 我什至将相同的数据绑定到图表旁边的数据网格,每次我的数据绑定的数据源值发生变化时,数据网格都会按预期做出反应。

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

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

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

所以问题如下:

  • 如何使用此解决方案捕获 PropertyChanged 通知?
  • 我可以在上面的 DependencyProperty 中添加什么来捕获这个吗?
  • 我需要在图表或系列中添加什么来实现这一点吗?

这几天我一直在绞尽脑汁,所以任何帮助或建议都将不胜感激

谢谢!

【问题讨论】:

标签: silverlight charts toolkit


【解决方案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)
{
}

【讨论】:

    【解决方案2】:

    我从未找到解决此问题的方法,最终使用了visifire 的图表控件

    我发现这更容易定制,但从未找到一种使用数据绑定来实现此目的的简洁方法,最终采用了一种更具程序性的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 2013-06-12
      • 1970-01-01
      • 2011-08-26
      • 2012-02-28
      • 1970-01-01
      相关资源
      最近更新 更多