У меня есть диаграмма инструментария 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);
}
}
}
Когда я изменяю рисуемые данные, мне нужно обновить MinimumMass
и MaximumMass
для оси X. Сначала я обновляю MinimumMass
до нового значения, затем MaximumMass
. Это нормально, если только новое значение MinimumMass
не больше старого значения MaximumMass
, после чего код привязки на графике вызывает исключение InvalidOperationException: The minimum value must be smaller than or equal to the maximum value.
Я мог бы обновить их в обратном порядке, но тогда я получу ту же проблему в обратном порядке. Кто-нибудь знает правильный способ справиться с этим без ужасного клуджа, чтобы гарантировать, что максимум временно слишком велик, чтобы его можно было побить (т.е. установите максимум на double.MaxValue
, затем установите минимум на новый минимум, затем максимум на новый максимум)?