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

WPF Toolkit: Bar Chart Axis Error When Trying to Swap Axes

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

Assigned independent axis cannot be used. This may be due to an unset Orientation property for the axis.

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

区间汇总

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

视图中有一大堆不相关的 XAML(与这个问题无关,即)——按钮、GroupPanel、TextBox 等——我已经测试过并且有效。因此,为了简洁起见,这只是 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> 我会得到一个水平图表,所以我只是将它们放在那里以尝试交换轴并使图表处于我想要的方向。

我尝试了一大堆东西,包括使用不同的轴类型(LinearAxisDateTimeAxisCategoryAxis)。我还尝试转储 IndependentAxis 定义(只留下 DependentRangeAxis),但这给了我以下错误:

Assigned dependent axis cannot be used. This may be due to an unset Orientation property for the axis or a type mismatch between the values being plotted and those supported by the axis.

基于此,我继续尝试将 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>

如果你想显示列,你应该使用 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