我有一个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轴更新 MinimumMass
和 MaximumMass
. 首先,我将 MinimumMass
更新为新值,然后更新 MaximumMass
. 除非新的 MinimumMass
值大于旧的 MaximumMass
,否则这很好,此时图中的绑定代码会抛出InvalidOperationException: The minimum value must be smaller than or equal to the maximum value.
我可以按相反的顺序更新它们,但后来我会反过来得到同样的问题 . 有没有人知道正确的处理方法没有一个可怕的kludge,以确保最大值暂时太大而不能被打败(即设置最大值为 double.MaxValue
,然后将最小值设置为新的最小值,然后设置为最大值到新的最大值)?
2 回答
最后,我在分配新值之前检查了订单:
使用try和catch
祝好运!