我正在尝试使用数据绑定将数据绑定到Silverlight工具包图表。 我会有一到多套系列,所以无法确定我手头需要多少系列。 我还想坚持使用数据绑定模型,而不是通过编程方式添加这些系列,因为许多其他控件都绑定到此数据源。
我在网上发现了一篇由Jeremiah Morrill撰写的文章,该文章展示了解决这个问题的方法。
现在这首先完美地工作,直到我在应用程序运行时尝试更新我的数据绑定的数据源值,这不会反映出来。好像它没有订阅PropertyChanged事件。 我甚至将相同的数据绑定到图表旁边的数据网格,并且每当我的数据绑定的数据源值发生变化时,datagrid会按预期更改。
在Jeremiah解决方案的ChartHelper中,我有以下依赖属性
public static readonly DependencyProperty SeriesSourceProperty =
DependencyProperty.RegisterAttached("SeriesSource",
typeof(IEnumerable),
typeof(ChartHelper),
new PropertyMetadata(SeriesSourceChanged));
我的应用程序启动时会调用SeriesSourceChanged事件。 但是,当我的DataBinding的数据源值发生更改时,不会再次调用它。
所以问题如下:
我已经在脑子里绞了几天,所以任何帮助或建议都会非常感激
谢谢!
答案 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
中的图表控件我发现这更容易定制,但从来没有找到一种使用数据绑定来实现这一目标的简洁方法,最终得到了一种更加专业化的方法。