1

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

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

耶利米的解决方案

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

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

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

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

所以问题如下:

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

我已经为此绞尽脑汁好几天了,所以任何帮助或建议将不胜感激

谢谢!

4

2 回答 2

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)
{
}
于 2011-02-22T23:29:38.310 回答
0

我从来没有找到解决这个问题的方法,最终使用了来自visifire的图表控件

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

于 2010-07-13T06:20:59.437 回答