我有一个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
,然后将最小值设置为新的最小值,然后设置为最大值到新的最大值?
答案 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;
}
祝你好运!