Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DevExpress: ChartsControl + binding 
V
    Опции темы
Ptica_Oz
  Дата 7.9.2011, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 1.3.2007

Репутация: нет
Всего: нет



Здравствуйте, уважаемые.

Помогите, пожалуйста, разобраться.

Есть у DevExpress такой компонент ChartControl для построения диаграмм. Диаграмма может состоять из нескольких серий (Series), которые состоят из точек (Point). Задача состоит в том, что бы формировать диаграмму динамически, т.е. с помощью связывания.

Для описания серий и точек разработана структура классов:
Код

     public class ChartData
    {
        private ObservableCollection<ChartSeries> _chartsSeries;
        public ChartData()
        {
            _chartsSeries = new ObservableCollection<ChartSeries>();
            _chartsSeries .Add(new ChartSeries());
            _chartsSeries.Add(new ChartSeries());
            _chartsSeries.Add(new ChartSeries());
        }

        public int Count
        {
            get { return _chartsSeries.Count; }
        }

        public ObservableCollection<ChartSeries> CartsSeries
        {
            get { return _chartsSeries; }
        }
    }


    public class ChartSeries 
    {
        private ObservableCollection<ChartPoint> _chartPoints;
        public ChartSeries()
        {
            _chartPoints = new ObservableCollection<ChartPoint>();
            _chartPoints.Add(new ChartPoint("Q", 1));
            _chartPoints.Add(new ChartPoint("W", 5));
            _chartPoints.Add(new ChartPoint("E", 3));
            _chartPoints.Add(new ChartPoint("R", 7));
        }

        public ObservableCollection<ChartPoint> ChartPoints
        {
            get { return _chartPoints; }
        }
    }

    public class ChartPoint : INotifyPropertyChanged
    {
        private string _argument;
        private double _value;
        
        public string Argument
        {
            get { return _argument; }
            set
            {
                _argument = value;
                OnPropertyChanged("Argument");
            }
        }

        public double Value
        {
            get { return _value; }
            set
            {
                _value = value;
                OnPropertyChanged("Value");
            }
        }

        public ChartPoint(string argument, double value)
        {
            _argument = argument;
            _value = value;
        }

        #region Реализация INotifyPropertyChanged

        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        #endregion


В модели создаю свойство, которое хранит объект, представляющий собой список серий:
Код

        public ChartData ChartData
        {
            get { return _chartData; }
        }


Ну и пытаюсь всё это дело завязать:
Код

      <dxc:ChartControl Grid.Row="1" Name="chartControl2" >
            <dxc:ChartControl.Legend>
                <dxc:Legend Margin="10,0,0,0"/>
            </dxc:ChartControl.Legend>
            <dxc:ChartControl.Titles>
                <dxc:Title Content="Customer Satisfaction" HorizontalAlignment="Center" />
            </dxc:ChartControl.Titles>
            <dxc:ChartControl.Diagram>
                <dxc:XYDiagram2D  SeriesDataMember="{Binding ChartData.CartsSeries}">                    
                    <dxc:XYDiagram2D.SeriesTemplate>
                        <dxc:BarSideBySideSeries2D DataSource="{Binding CartsSeries.ChartPoints}"
                                                   ArgumentDataMember="Argument" 
                                                   ValueDataMember="Value">
                        </dxc:BarSideBySideSeries2D>
                    </dxc:XYDiagram2D.SeriesTemplate>
                </dxc:XYDiagram2D>
            </dxc:ChartControl.Diagram>
        </dxc:ChartControl>


В принципе строчка 
Код

<dxc:XYDiagram2D  SeriesDataMember="{Binding ChartData.CartsSeries}"> 
 срабатывает и в свойство ChartData.CartsSeries заходит, и там всё есть (все объекты созданы). Но вот уже 
Код

DataSource="{Binding CartsSeries.ChartPoints}"
 не срабатывает.

Пример со связыванием я нашла только вот этот. В нём жёстко указано, что серия одна, а вот точек в ней сколько хотите. А как сделать то, что мне нужно?

DevExpress 2011.1, VS 2010
PM MAIL   Вверх
Ptica_Oz
  Дата 9.9.2011, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 1.3.2007

Репутация: нет
Всего: нет



Разобралась я. Основная ошибка заключалась в неверном представлении данных.

Серии точек описываются так:
Код

public class ChartSeries 
    {
        private ObservableCollection<ChartPoint> _chartPoints;
        public ChartSeries()
        {
            _chartPoints = new ObservableCollection<ChartPoint>();
            _chartPoints.Add(new ChartPoint("Q", 1, "AA"));
            _chartPoints.Add(new ChartPoint("Q", 9, "BB"));
            _chartPoints.Add(new ChartPoint("W", 5, "AA"));
            _chartPoints.Add(new ChartPoint("E", 3, "BB"));
            _chartPoints.Add(new ChartPoint("R", 7, "BB"));
            _chartPoints.Add(new ChartPoint("T", 4, "AA"));
        }
        public ObservableCollection<ChartPoint> ChartPoints
        {
            get { return _chartPoints; }
        }
    }
    public class ChartPoint : INotifyPropertyChanged
    {
        private string _argument;
        private double _value;
        private string _series;

        public string Argument
        {
            get { return _argument; }
            set
            {
                _argument = value;
                OnPropertyChanged("Argument");
            }
        }
        public double Value
        {
            get { return _value; }
            set
            {
                _value = value;
                OnPropertyChanged("Value");
            }
        }

        public string Series
        {
            get { return _series; }
            set
            {
                _series = value;
                OnPropertyChanged("Series");
            }
        }

        public ChartPoint(string argument, double value)
        {
            _argument = argument;
            _value = value;
        }

        public ChartPoint(string argument, double value, string series) 
            : this(argument, value)
        {
            _series = series;
        }

        #region Реализация INotifyPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
        #endregion
}



А связывание так:
Код

       <dxc:ChartControl Name="chartControl1"  DataSource="{Binding ChartSeries.ChartPoints}">
            <dxc:ChartControl.Legend>
                <dxc:Legend Margin="10,0,0,0"/>
            </dxc:ChartControl.Legend>
            <dxc:ChartControl.Titles>
                <dxc:Title Content="Customer Satisfaction" HorizontalAlignment="Center" />
            </dxc:ChartControl.Titles>
            <dxc:ChartControl.Diagram>
                <dxc:XYDiagram2D SeriesDataMember="Series" >
                    <dxc:XYDiagram2D.SeriesTemplate >
                        <dxc:BarSideBySideSeries2D ArgumentDataMember="Argument" ValueDataMember="Value">
                        </dxc:BarSideBySideSeries2D>
                    </dxc:XYDiagram2D.SeriesTemplate>
                </dxc:XYDiagram2D>
            </dxc:ChartControl.Diagram>
        </dxc:ChartControl>


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0785 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.