在WPF工具包图表图上更改轴会引发异常

时间:2011-12-14 18:22:20

标签: wpf charts wpftoolkit

我有一个WPF工具包图表,我希望能够指定轴范围并更改显示的数据。这些中的任何一个都可以独立工作,但是当我将它们组合在一起时,我会从绑定代码中抛出一个异常,因为轴的最小值和最大值会短暂地反转。

以下是一些代码:

<Common:MultiSeriesChart SeriesSource="{Binding Data}" >
  <chartingToolkit:Chart.Axes>
    <chartingToolkit:LinearAxis
            Orientation="X" Minimum="{Binding MinimumMass}" Maximum="{Binding MaximumMass}"/>
    <chartingToolkit:LinearAxis
            Orientation="Y" Minimum="0" Maximum="100"/>
  </chartingToolkit:Chart.Axes>
</Common:MultiSeriesChart>

ViewModel中的代码(相当标准的MVVM东西):

    private double maximumMass;
    public double MaximumMass
    {
        get { return maximumMass; }
        set
        {
            if (maximumMass != value)
            {
                maximumMass = value;
                RaisePropertyChanged(() => MaximumMass);
            }
        }
    }

    private double minimumMass;
    public double MinimumMass
    {
        get { return minimumMass; }
        set
        {
            if (minimumMass != value)
            {
                minimumMass = value;
                RaisePropertyChanged(() => MinimumMass);
            }
        }
    }

当我更改正在绘制的数据时,我需要更新X轴的MinimumMassMaximumMass。首先,我将MinimumMass更新为新值,然后更新MaximumMass。除非新MinimumMass值大于旧MaximumMass,否则这很好,此时图中的绑定代码会抛出InvalidOperationException:The minimum value must be smaller than or equal to the maximum value.

我可以按相反的顺序更新它们,但之后我会反过来得到同样的问题。有没有人知道正确的方法来处理这个没有可怕的kludge,以确保最大值暂时太大而不能被打败(即设置最大值为double.MaxValue,然后将最小值设置为新的最小值,然后设置为最大值到新的最大值?

2 个答案:

答案 0 :(得分:3)

最后,我在分配新值之前检查了订单:

if (newMin > MaximumMass)
{
    MaximumMass = newMax;
    MinimumMass = newMin;
}
else
{
    MinimumMass = newMin;
    MaximumMass = newMax;
}

答案 1 :(得分:0)

使用try和catch

try
{
   min = a;
   max = b;
}
catch(exception)
{
   // reassign values here for min, max
   min = a;
   max = b;
}

祝你好运!