WPF工具包:尝试交换轴时条形图轴错误

时间:2017-11-27 03:37:32

标签: c# wpf xaml charts wpftoolkit

我正在创建一个程序来从文件中收集数据,对其进行分析,并在条形图中显示数据。我正在使用WPF,因此我从NuGet中获取了WPFToolkit和WPFToolkit.DataVisualization。使用一组非常基本的XAML,图表看起来很好,但是它的轴是交换的 - 它给了我一个水平条形图,我想要列。所以我尝试交换轴,并得到以下错误:

  

不能使用指定的独立轴。这可能是由于轴的未设置Orientation属性造成的。

这是我的代码,从我最终绑定到的集合中的项目定义开始:

时间间隔摘要

public class IntervalSummary
{
    public IntervalSummary()
    {
        Results = new List<PollResult>();
    }

    public DateTime PeriodStart { get; set; }

    public DateTime PeriodEnd { get; set; }

    public int MinimumItemCount { get; set; }

    public int MaximumItemCount { get; set; }

    public int AverageItemCount { get; set; }

    public List<PollResult> Results { get; set; }
}

ViewModel中的属性

请注意,我在这里使用Caliburn.Micro,因此Set()方法基本上处理将值设置为支持字段以及属性更改通知。

public ObservableCollection<IntervalSummary> DataItems
{
    get { return _dataItems; }
    set { Set(ref _dataItems, value); }
}

图表XAML

在View - Buttons,GroupPanels,TextBoxes等中有一大堆不相关的XAML(与这个问题无关) - 我已经测试过并且有效。因此,为了简洁起见,这只是Window定义(因此您可以看到XML名称空间声明)和图表声明。

<Window x:Class="QueueMonitorAnalyzer.Views.ShellView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:QueueMonitorAnalyzer.Views"
        xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
        xmlns:datavis="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
        xmlns:toolkitEx="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
        mc:Ignorable="d">
    <Border Padding="5">
        <Grid>
            <datavis:Chart Name="Chart" Grid.Row="6" Title="Average Items in Queue">
                <datavis:Chart.Series>
                    <datavis:BarSeries Name="BarSeries" Title="Items (Avg.)" 
                                   ItemsSource="{Binding Path=DataItems}"
                                       DependentValueBinding="{Binding Path=AverageItemCount}"
                                       IndependentValueBinding="{Binding Path=PeriodStart}">
                        <datavis:BarSeries.DependentRangeAxis>
                            <datavis:LinearAxis Orientation="Y" Title="Item Count"/>
                        </datavis:BarSeries.DependentRangeAxis>

                        <datavis:BarSeries.IndependentAxis>
                            <datavis:DateTimeAxis Orientation="X" Title="Time Stamp"/>
                        </datavis:BarSeries.IndependentAxis>
                    </datavis:BarSeries>
                </datavis:Chart.Series>
            </datavis:Chart>
        </Grid>
    </Border>
</Window>

在一天结束时,这里的目标只是拥有一个柱形图。如果我遗漏了<datavis:BarSeries.DependentRangeAxis><datavis:BarSeries.IndependentAxis>,我会得到一个水平图表,所以我只是将它们放在那里,试图交换轴并使图表朝着我喜欢的方向。< / p>

我尝试了很多东西,包括使用不同的轴类型(LinearAxisDateTimeAxisCategoryAxis)。我也试过转储IndependentAxis定义(仅留下DependentRangeAxis),但这给了我以下错误:

  

不能使用指定的从属轴。这可能是由于轴的未设置Orientation属性或绘制的值与轴支持的值之间的类型不匹配。

基于此,我继续尝试将IntervalSummary.AverageItemCount数据类型更改为doublefloat,这也让我无处可去。

有谁能看到我在这里做错了什么?

最后,早些时候我说过一组基本的XAML正确生成图表,但方向不正确。这是XAML的基本集:

<datavis:Chart Name="Chart" Grid.Row="6" Title="Average Items in Queue">
    <datavis:Chart.Series>
        <datavis:BarSeries Name="BarSeries" Title="Items (Avg.)" 
                        ItemsSource="{Binding Path=DataItems}"
                            DependentValueBinding="{Binding Path=AverageItemCount}"
                            IndependentValueBinding="{Binding Path=PeriodStart}">
        </datavis:BarSeries>
    </datavis:Chart.Series>
</datavis:Chart>

1 个答案:

答案 0 :(得分:1)

如果要显示列,则应使用ColumnSeries

<datavis:Chart Name="Chart" Grid.Row="6" Title="Average Items in Queue">
    <datavis:Chart.Series>
        <datavis:ColumnSeries Name="BarSeries" Title="Items (Avg.)" 
                              ItemsSource="{Binding DataItems}"
                              DependentValuePath="AverageItemCount"
                              IndependentValuePath="PeriodStart">
            <datavis:ColumnSeries.DependentRangeAxis>
                <datavis:LinearAxis Orientation="Y" Title="Item Count"/>
            </datavis:BarSeries.DependentRangeAxis>
                <datavis:ColumnSeries.IndependentAxis>
                <datavis:DateTimeAxis Orientation="X" Title="Time Stamp"/>
            </datavis:BarSeries.IndependentAxis>
        </datavis:ColumnSeries>
    </datavis:Chart.Series>
</datavis:Chart>

有关详细信息,请参阅以下文章:https://www.codeproject.com/Articles/196502/WPF-Toolkit-Charting-Controls-Line-Bar-Area-Pie-Co