J'ai un graphique de la boîte à outils WPF que je veux pouvoir à la fois spécifier la plage d'axes et modifier les données affichées. L'une ou l'autre de ces fonctions fonctionne bien indépendamment, mais lorsque je les mets ensemble, une exception est générée par le code de liaison car les axes minimum et maximum sont brièvement inversés.La modification des axes sur le graphique de graphique de la boîte à outils WPF génère une exception
Voici quelques code:
<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>
Et le code dans le ViewModel (stuff MVVM assez standard):
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);
}
}
}
Quand je change les données en cours d'élaboration, je dois mettre à jour le MinimumMass
et MaximumMass
pour l'axe X. Je commence par mettre à jour le MinimumMass
à la nouvelle valeur, puis le MaximumMass
. Cela est bien moins que la nouvelle valeur MinimumMass
est plus grand que l'ancien MaximumMass
, à quel point le code de liaison dans le graphique jette un InvalidOperationException: The minimum value must be smaller than or equal to the maximum value.
je pourrais les mettre à jour dans l'ordre inverse, mais je me faisais la même problème à l'envers. Est-ce que quelqu'un sait la bonne façon de traiter cela sans un horrible kludge pour s'assurer que le maximum est temporairement trop grand pour être battu (par exemple, mettre au maximum double.MaxValue
, puis définir minimum à nouveau minimum, puis maximum au nouveau maximum)?