【发布时间】:2014-08-22 19:20:55
【问题描述】:
我正在尝试生成一个样条图表,该图表将有多个系列,每个系列都有多个点。我在 Excel 中做了一些看起来像这样的事情
除了我将有更多类似的七个椭圆。
我选择使用 WPF Toolkit,因为它是免费的,我已经生成了所有的点,我把它们放在下面的结构中。
List<List<KeyValuePair<double, double>>>
其中外部列表是系列列表,内部列表是该系列中的点列表。
我没有看到要绑定到以生成系列列表的项目源,我将如何绑定到这个?
编辑
我已经放弃了我想做的事情,我希望动态绑定到列表列表,用户可以在其中定义他们想要的任何渐变曲线,每条曲线都有一组点。
现在我所做的是制作一组特定的曲线(大约 7 个)并用所有点填充它们,让用户从定义的列表中进行选择。
这是我为此编写的 XAML,
<chartingToolkit:Chart Title="Compressor Map">
<chartingToolkit:LineSeries DependentValuePath="Value"
IndependentValuePath="Key"
ItemsSource="{Binding Path=Points[0]}"
IsSelectionEnabled="True" />
<chartingToolkit:LineSeries DependentValuePath="Value"
IndependentValuePath="Key"
ItemsSource="{Binding Path=Points[1]}"
IsSelectionEnabled="True" />
</chartingToolkit:Chart>
我计划根据一组选择切换可见性。但是这不起作用,它会给出以下错误,
System.Windows.Data Error: 17 : Cannot get 'Item[]' value (type 'List1') 来自“点”(类型“列表1'). BindingExpression:Path=Points[0]; DataItem='ChartViewModel' (HashCode=4925117); target element is 'LineSeries' (Name=''); target property is 'ItemsSource' (type 'IEnumerable') ArgumentOutOfRangeException:'System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: index'”
我宁愿不必制作七个不同的属性,每个级别集一个。首先,我觉得那是蛮力,而且我有一个内部循环来填充每个级别的点,并且写出整个循环将是可怕的。
感谢您的帮助。
【问题讨论】:
-
能否请您发布您的 xaml 代码?和给定字典的代码隐藏/虚拟机?顺便说一句,您不能绑定到字典。
-
@Stian。进行了编辑以显示我现在的进度。
-
你可以做你想做的事。我是通过从 Chart 继承并添加一个名为 SeriesSource 的依赖属性来完成的。我的属性更改方法然后加载设置模板并通过 SeriesSource 执行 foreach,为每个点子集合添加模板实例。这是使用附加属性实现此jmorrill.hjtcentral.com/Home/tabid/428/EntryId/351/… 的 SilverLight 版本的链接。如果有什么需要改变的话,将其转换为 WPF 应该不会太难。
-
@LeeO。谢谢,这帮助很大。把它准确地放在答案中,我会接受。