动态创建Stacked Bar Series图表Silverlight的系列

时间:2014-04-14 21:54:29

标签: silverlight silverlight-5.0 silverlight-toolkit

我遇到了这个问题,我想不出一个简单的解决方法。

这是我的XAML

    <toolkit:Chart Height="250" x:Name="ProductSalesChart" >
        <toolkit:Chart.Series>
            <toolkit:StackedBarSeries>
                <toolkit:SeriesDefinition Title="Series1" ItemsSource="{Binding ProductA}"  IndependentValueBinding="{Binding Milestone}" DependentValueBinding="{Binding Sales}">
                </toolkit:SeriesDefinition>
                <toolkit:SeriesDefinition Title="Series2" ItemsSource="{Binding ProductB}"   IndependentValueBinding="{Binding Milestone}" DependentValueBinding="{Binding Sales}">
                </toolkit:SeriesDefinition>

                <toolkit:StackedBarSeries.IndependentAxis>
                    <toolkit:CategoryAxis Orientation="X"></toolkit:CategoryAxis>
                </toolkit:StackedBarSeries.IndependentAxis>

                <toolkit:StackedBarSeries.DependentAxis>
                    <toolkit:LinearAxis Orientation="Y"  ShowGridLines="True"></toolkit:LinearAxis>
                </toolkit:StackedBarSeries.DependentAxis>

            </toolkit:StackedBarSeries>
        </toolkit:Chart.Series>
    </toolkit:Chart>

所以基本上,它是一个叠加的图表,其中X轴为里程碑,Y轴为每个产品的销售数量。 我得到了这个工作,除了我检索的产品来自数据库,它可以改变。在上面的图表中,我将其硬编码为两个(Series1和Series2)。有没有办法将此系列绑定到View模型对象,以便它可以自动上升或下降?

根据我的发现,很少有选择:

a)从视图模型访问图表控件并以编程方式添加系列。但这并没有打破MVVM。另外,如何从视图模型中获取对图表控件的引用?这有什么API吗?使用事件触发器不起作用。 (至少对于图表OnLoaded)

b)创建自己的继承基本类的Chart类。这有多容易?有什么好样品吗?

还有其他想法吗?

1 个答案:

答案 0 :(得分:-1)

在尝试使用ToolKit图表时,我遇到了真正的问题,特别是在绑定和如何以MVVM方式使用方面。所有的例子都是XAML定义的系列(和你的一样),或者绑定图表的相当简单的方面而不是数据。

我没有你所有的答案,因为我有同样的问题,但也许可以帮助,因为我设法以数据驱动的方式工作。

我使用Graphite Charts http://www.graphitecharts.com/主要是因为他们拥有不错的文档,所以我实际上可以开始并提高效率,而不是试图理清每个类的基本知识以及如何使用它们。

(a)我在视图模型中执行了所有数据访问,响应来自视图的命令。虽然视图上的其他操作将由视图的代码隐藏处理,但是这些操作将从视图模型公开的数据中创建新的系列集合,系列和数据点。我从来没有找到过将一系列集合绑定到VM属性的方法,但是在代码隐藏中构建一个系列工作得很好。事实上,它可能是一个更清晰的分离,因为一系列(和数据点)是非常多的视图对象。

(b)我没有尝试实现自己的。尝试使用石墨(或坚持使用silverlight)并尝试使用VM获取数据的方法,但在视图中构建图表。