首页 文章

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

提问于
浏览
3

我有一个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 回答

  • 3

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

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

    使用try和catch

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

    祝好运!

相关问题