Как связать данные из нескольких серий с диаграммой набора Silverilght - PullRequest
1 голос
/ 06 мая 2009

Я пытаюсь использовать привязку данных для привязки данных к диаграмме набора инструментов Silverlight. У меня будет один-много наборов серий, поэтому я не могу определить, сколько серий мне нужно, прежде чем раздачу. Я также хочу придерживаться модели привязки данных и не прибегать к программному добавлению этих рядов, поскольку многие другие элементы управления связываются с этим источником данных.

Я нашел в Интернете статью Джереми Моррила, в которой показано решение этой самой проблемы.

Решение Иеремии

Сначала это работало идеально, пока я не попытался обновить значения источника данных моей привязки данных во время работы приложения, и это не отражалось. Как будто он не был подписан на событие PropertyChanged. Я даже связал те же данные с сеткой данных рядом с диаграммой, и сетка данных реагирует, как и ожидалось, при каждом изменении значений источника данных моей привязки.

В моем ChartHelper из решения Иеремии у меня есть следующее свойство зависимости

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

Событие SeriesSourceChanged вызывается при запуске моего приложения. Однако, когда значения источника данных моего DataBinding изменяются, это не вызывается снова.

Итак, вопросы таковы:

  • Как я могу получить уведомление PropertyChanged с помощью этого решения?
  • Есть ли что-то, что я могу добавить в DependencyProperty выше, чтобы захватить это?
  • Что-то, что мне нужно добавить в таблицу или серию, чтобы достичь этого?

Я ломал голову над этим уже несколько дней, поэтому любая помощь или предложения будут высоко оценены

Спасибо!

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Тип 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)
{
}
0 голосов
/ 13 июля 2010

Я так и не нашел решение этой проблемы и в итоге использовал элемент управления диаграммы из visifire

Я обнаружил, что это намного проще в настройке, но никогда не находил изящного способа использования привязки данных для достижения этой цели, и в итоге получил более программный подход.

...