wpf中的图表绑定 [英] Chart binding in wpf

查看:193
本文介绍了wpf中的图表绑定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有很大的问题绑定堆叠列系列到我的图表。

i have big problem with binding Stacked Column Series to my chart.

我有ViewModel中的公共ObservableCollection系列属性,尝试通过多种方式,但它仍然不工作。

I have public ObservableCollection Series property in my ViewModel and try by many ways but it still not working.

这是来自ViewModel的代码来准备系列:private void drawChart(){this.Series.Clear();

This is code from ViewModel to prepare Series: private void drawChart() { this.Series.Clear();

    var dataValues = new List<List<SimpleDataValue>>();

    int wartoscNiezalezna = 1;

    for (int i = 0; i < 2; i++)
    {
        dataValues.Add(new List<SimpleDataValue>());
    }

    foreach (var item in myCollection)
    {
        var param = someparam;

        dataValues[0].Add(new SimpleDataValue { IndependentValue = "Czujnik " + wartoscNiezalezna, DependentValue = 100 });
        //czerwone
        dataValues[1].Add(new SimpleDataValue { IndependentValue = "" + wartoscNiezalezna, DependentValue = 200 });

        wartoscNiezalezna++;

    }
    var stackedSeries = Activator.CreateInstance(typeof(StackedColumnSeries)) as DefinitionSeries;

    int itemnr=0;
    foreach (var item in dataValues)
    {
        var definicja = new SeriesDefinition();
        if(itemnr==0)
        definicja.Title = "Stan 1";
        else
            definicja.Title = "Stan 2";
        definicja.DependentValuePath = "DependentValue";
        definicja.IndependentValuePath = "IndependentValue";
        definicja.ToolTip = "asdas";
        definicja.ItemsSource = item;
        stackedSeries.SeriesDefinitions.Add(definicja);
        itemnr++;
    }
   Series.Add(stackedSeries);
}

我无法绑定到:

<charting:Chart x:Name="MyChart"  Padding="10,10,10,10">
    <charting:Chart.Series>
        <charting:StackedColumnSeries>
            <charting:SeriesDefinition ItemsSource="{Binding Series}" DependentValuePath="DependentValue" IndependentValuePath="IndependentValue">
            </charting:SeriesDefinition>
        </charting:StackedColumnSeries>
    </charting:Chart.Series>
</charting:Chart>

我尝试使用SeriesDefinitions Collection和其他。我将非常感谢一些帮助。

I was trying with SeriesDefinitions Collection and others. I will be very grateful to some help.

推荐答案

我找不到 StackedColumnSeries 在WPF中,所以我将使用Silverlight。我看到你在代码中创建 SeriesDefinition ,在这种情况下没有点绑定,这里是正确的代码:

I can't find StackedColumnSeries in WPF so I will use Silverlight. As I see you create SeriesDefinition in code, in that case there is no point in binding, here is correct code:

Xaml without chart series:

Xaml without chart series:

<charting:Chart x:Name="MyChart" Padding="10,10,10,10" />

代码背后:

public class SimpleDataValue
{
    public string IndependentValue { get; set; }
    public int DependentValue { get; set; }
}

public partial class MainPage : UserControl
{
    private int[] myCollection = new int[10];
    private List<DefinitionSeries> Series = new List<DefinitionSeries>();

    public MainPage()
    {
        InitializeComponent();
        this.drawChart();
        this.Series.ForEach(this.MyChart.Series.Add);
    }

    private void drawChart()
    {
        this.Series.Clear();
        this.Series = new List<DefinitionSeries>();
        var dataValues = new List<List<SimpleDataValue>>();

        int wartoscNiezalezna = 1;

        for (int i = 0; i < 2; i++)
        {
            dataValues.Add(new List<SimpleDataValue>());
        }

        foreach (var item in myCollection)
        {
            dataValues[0].Add(new SimpleDataValue { IndependentValue = "Czujnik " + wartoscNiezalezna, DependentValue = 100 });
            //czerwone
            dataValues[1].Add(new SimpleDataValue { IndependentValue = "" + wartoscNiezalezna, DependentValue = 200 });

            wartoscNiezalezna++;
        }

        var stackedSeries = Activator.CreateInstance(typeof(StackedColumnSeries)) as DefinitionSeries;

        int itemnr = 0;
        foreach (var item in dataValues)
        {
            var definicja = new SeriesDefinition();
            if (itemnr == 0)
                definicja.Title = "Stan 1";
            else
                definicja.Title = "Stan 2";
            definicja.DependentValuePath = "DependentValue";
            definicja.IndependentValuePath = "IndependentValue";
            ToolTipService.SetToolTip(definicja, "asdas");
            definicja.ItemsSource = item;
            stackedSeries.SeriesDefinitions.Add(definicja);
            itemnr++;
        }
        Series.Add(stackedSeries);
    }

}

你的问题以这种方式,因为 ViewModel 不能包含任何形式的视图:

What about me, I would solve your problem in this way, because ViewModel mustn't contains anything form the View:

Xaml

<charting:Chart x:Name="MyChart"  Padding="10,10,10,10">
    <charting:Chart.Series>
        <charting:StackedColumnSeries>
            <charting:SeriesDefinition Title="Stan 1" ItemsSource="{Binding FirstCollection}" DependentValuePath="DependentValue" IndependentValuePath="IndependentValue" />
            <charting:SeriesDefinition Title="Stan 2" ItemsSource="{Binding SecondCollection}" DependentValuePath="DependentValue" IndependentValuePath="IndependentValue" />
        </charting:StackedColumnSeries>
    </charting:Chart.Series>
</charting:Chart>

代码隐藏

public class ChartModel
{
    public List<SimpleDataValue> FirstCollection { get; set; }
    public List<SimpleDataValue> SecondCollection { get; set; }
}

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
        this.MyChart.DataContext = new ChartModel
        {
            FirstCollection = Enumerable.Range(1, 10).Select(i => new SimpleDataValue { IndependentValue = "Czujnik " + i, DependentValue = 100 }).ToList(),
            SecondCollection = Enumerable.Range(1, 10).Select(i => new SimpleDataValue { IndependentValue = "" + i, DependentValue = 200 }).ToList()
        };

    }
}

这篇关于wpf中的图表绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆