【问题标题】:Chart binding in wpfwpf中的图表绑定
【发布时间】:2011-03-05 08:32:15
【问题描述】:

我在将堆积列系列绑定到我的图表时遇到了很大的问题。

我的 ViewModel 中有公共 ObservableCollection Series 属性,并尝试了多种方式,但仍然无法正常工作。

这是来自 ViewModel 准备系列的代码: 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 等。我将非常感谢一些帮助。

【问题讨论】:

    标签: wpf bind charts


    【解决方案1】:

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

    没有图表系列的 Xaml:

    <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 不能包含视图中的任何内容:

    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()
            };
    
        }
    }
    

    【讨论】:

    • 非常非常感谢,现在工作很好。谢谢!!:)
    • @jars 好的,接受答案,当您将来提出其他可能的问题时,它将为您提供更好的声誉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    相关资源
    最近更新 更多