Как динамически добавить DefinitionSeries в StackedAreaChart в Silverlight? - PullRequest
1 голос
/ 13 мая 2011

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

Я не могу найти хороших примеров этого в Интернете, за исключением демонстраций Silverlight Visualization (пример Stacked Area) .

Программист сделал это статичным с тремя предопределенными сериями, но я хочу, чтобы он был динамичным и не мог понять: - /

Я потратил 2 недели на это сейчас, любая помощь будет принята с благодарностью, так как я новичок в этом: (

Спасибо, чел! :)

1 Ответ

0 голосов
/ 07 июня 2011

Наконец-то я нашел время для создания примера динамического случайного ряда.

XAML-код прост: одна кнопка и диаграмма.

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="40" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <Button Content="Add random series" Click="AddSeries_Click" HorizontalAlignment="Center" />
    <chart:Chart x:Name="chart" Grid.Row="1">
        <chart:StackedAreaSeries />
    </chart:Chart>
</Grid>

Кодовый фрагмент выглядит довольно сложным, но большая часть кода используется для генерации случайных данных. Основной код в методе AddSeries_Click.

public partial class MainPage : UserControl
{
    private string[] categories = new[] { "Apples", "Oranges", "Bananas", "Lemons" };
    private Random random = new Random((int)DateTime.Now.Ticks);
    private int lastSeriesYear = 2011;

    public MainPage()
    {
        InitializeComponent();
    }

    public class ChartItem
    {
        public string Title { get; set; }
        public double Value { get; set; }
    }

    private void AddSeries_Click(object sender, RoutedEventArgs e)
    {
        var sd = new SeriesDefinition();
        sd.ItemsSource = categories.Select(c => new ChartItem { Title = c, Value = random.Next(30, 35) }).ToList();
        sd.Title = (lastSeriesYear--).ToString();
        sd.IndependentValuePath = "Title";
        sd.DependentValuePath = "Value";

        ((StackedAreaSeries)this.chart.Series[0]).SeriesDefinitions.Add(sd);
    }
}

Если вам больше нравится работать с моделями представлений и наблюдаемыми коллекциями, чем с выделенным кодом, у меня есть расширенный класс диаграмм *1011*, который позволяет связывать данные со списком серий. Но для этого требуется гораздо больше кода, так что пусть будет этот пример с выделенным кодом.

...