vidi un esempio in cui c'erano 2 proprietà di dipendenza:Qual è la necessità di forzare una proprietà dipendenze?
public static readonly DependencyProperty CurrentReadingProperty =
DependencyProperty.Register("CurrentReading",
typeof(double),
typeof(Gauge),
new FrameworkPropertyMetadata(Double.NaN,
FrameworkPropertyMetadataOptions.None,
new PropertyChangedCallback(OnCurrentReadingChanged),
new CoerceValueCallback(CoerceCurrentReading)
),
new ValidateValueCallback(IsValidReading)
);
e
public static readonly DependencyProperty MinReadingProperty =
DependencyProperty.Register(
"MinReading",
typeof(double),
typeof(Gauge),
new FrameworkPropertyMetadata(
double.NaN,
FrameworkPropertyMetadataOptions.None,
new PropertyChangedCallback(OnMinReadingChanged),
new CoerceValueCallback(CoerceMinReading)
),
new ValidateValueCallback(IsValidReading));
in OnCurrentReadingChanged Eseguo seguenti operazioni d.CoerceValue(MinReadingProperty);
che richiama CoerceValueCallback delegato ("CoerceMinReading") che ha il seguente codice:
private static object CoerceMinReading(DependencyObject d, object value)
{
Gauge g = (Gauge)d;
double min = (double)value;
// some required conditions;
return min;
}
Quello che voglio capire è, perché devo eseguire la coercizione?
Perché non posso semplicemente chiamare SetValue all'interno della mia proprietà modificato callback e modificare le proprietà richieste invece di chiamare CoerceValue e gestire le cose nel mio callback coattivo?
Non dovresti mai farlo. Non è chiaro il motivo per cui pensi di aver bisogno di farlo ... – Will