Здравствуйте, уважаемые. Помогите, пожалуйста, разобраться. Есть у 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
|