我遇到了这个问题,我想不出一个简单的解决方法。
这是我的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类。这有多容易?有什么好样品吗?
还有其他想法吗?
答案 0 :(得分:-1)
在尝试使用ToolKit图表时,我遇到了真正的问题,特别是在绑定和如何以MVVM方式使用方面。所有的例子都是XAML定义的系列(和你的一样),或者绑定图表的相当简单的方面而不是数据。
我没有你所有的答案,因为我有同样的问题,但也许可以帮助,因为我设法以数据驱动的方式工作。
我使用Graphite Charts http://www.graphitecharts.com/主要是因为他们拥有不错的文档,所以我实际上可以开始并提高效率,而不是试图理清每个类的基本知识以及如何使用它们。
(a)我在视图模型中执行了所有数据访问,响应来自视图的命令。虽然视图上的其他操作将由视图的代码隐藏处理,但是这些操作将从视图模型公开的数据中创建新的系列集合,系列和数据点。我从来没有找到过将一系列集合绑定到VM属性的方法,但是在代码隐藏中构建一个系列工作得很好。事实上,它可能是一个更清晰的分离,因为一系列(和数据点)是非常多的视图对象。
(b)我没有尝试实现自己的。尝试使用石墨(或坚持使用silverlight)并尝试使用VM获取数据的方法,但在视图中构建图表。