WPF工具包(2010年2月发行)当ItemsSource只有一个项目时,列系列为空的图表

时间:2011-01-21 18:34:09

标签: c# wpf wpftoolkit

我遇到了一个烦人的问题:我有一个简单的Chart,其中包含一个ColumnSeries和两个轴(一个LinearAxis用于依赖值,一个DateTimeAxis用于独立的一个)。 我的ColumnSeries的ItemsSource绑定到DataPoint实例的集合(只有3个属性的简单类:Date,IndependentValue和DependentValue)。 如果Collection中有2个或更多项,则Chart会正确显示列; 但如果它只有一个,则不会显示任何

有关正在发生的事情的任何想法?

这是XAML(为简洁起见,省略了标准和WPF Toolkit的命名空间):

<Window x:Class="Demo.MainWindow" (...) xmlns:local="clr-namespace:Demo">
  <Grid>
    <Grid.Resources>
      <local:DataPointCollection x:Key="DataPointCollection" />
    </Grid.Resources>
    <ct:Chart Title="Demo">
      <ct:ColumnSeries Title="A"
                       ItemsSource="{StaticResource DataPointCollection}"
                       IndependentValueBinding="{Binding Date}"
                       DependentValueBinding="{Binding DependentValue}" />
      <ct:Chart.Axes>
        <ct:LinearAxis Orientation="Y"
                       ShowGridLines="True"
                       Title="Dependent Title" />
        <ct:DateTimeAxis Orientation=X"
                         ShowGridLines="True"
                         Interval="1"
                         IntervalType="Days" />
      </ct:Chart.Axes>
    </ct:Chart>
  </Grid>
</Window>

DataPointCollection类:

using System;

namespace Demo
{
  using System.Collections.ObjectModel;

  public class DataPointCollection: Collection<DataPoint>
  {
    public DataPointCollection()
    {
      Add(new DataPoint { Date = DateTime.Now.Date, DependentValue = 5 });
      // Comment next line to see an empty chart:
      Add(new DataPoint { Date = DateTime.Now.Date.AddDays(1), DependentValue = 6 });
    }
  }
}

DataPoint类:

using System;

namespace Demo
{
  public class DataPoint
  {
    public DateTime Date { get; set; }
    public double DependentValue { get; set; }
  }
}

该项目是常规WPF应用程序(WPF 4)。

提前致谢。

1 个答案:

答案 0 :(得分:0)

浏览ColumnSeries的源代码显示列宽与数据范围相关,在您的情况下为零。除非您想修复工具包中的错误,否则我建议的唯一解决方法是用虚拟点围绕您的单点,使其看起来只显示一列:

        var now = DateTime.Now;
        Add(new DataPoint { Date = now, DependentValue = 5 });
        Add(new DataPoint { Date = now + TimeSpan.FromDays(1), DependentValue = 0 });
        Add(new DataPoint { Date = now - TimeSpan.FromDays(1), DependentValue = 0 });