In Silverlight, è possibile definire valori min / max per una DependencyProperty?
-
05-07-2019 - |
Domanda
Ad esempio, ho una proprietà di dipendenza che modifica ScaleTransform di una tela, ma se mai scende sotto lo zero genera un errore. Certo, potrei semplicemente forzarlo a zero nel codice se ciò dovesse mai accadere, ma preferirei usare un metodo migliore come usare un udouble (doppio senza segno), che non esiste in Silverlight o addirittura impostare i valori min / max da qualche parte in DependencyProperty.
Qual è l'approccio migliore qui?
Soluzione
Se hai intenzione di gestirlo nella DependencyProperty, ti consiglio di gestirlo in PropertyChangedCallback , che convalida che il valore sia compreso nell'intervallo corretto e lo sostituisce in caso contrario.
Potresti anche gestirlo al di fuori della proprietà di dipendenza. Ad esempio:
- Un convertitore di valore
- Applicandolo nel modello e associandolo a un ViewModel che ha sempre un valore valido. Vedi ulteriori informazioni su MVVM qui .
Altri suggerimenti
Solo per aggiungere a ciò, all'interno di PropertyChangedCallback, un modello tipico verrà ripristinato su valori errati / fuori intervallo, prima di generare un'eccezione.
Se non si esegue il ripristino, il valore fuori intervallo verrà comunque impostato e il proprio stato non sarà valido.
Vedrai esempi di questo "coerciano del povero" in alcuni dei Silverlight Toolkit. Ecco la AutoCompleteBox.cs source .
Il modello è simile a:
int newValue = (int)e.NewValue;
if (newValue < 0)
{
source._ignorePropertyChange = true;
d.SetValue(e.Property, e.OldValue);
throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, Properties.Resources.AutoComplete_OnMinimumPopulateDelayPropertyChanged_InvalidValue, newValue), "value");
}
Puoi anche implementare il tuo " sola lettura " Proprietà di dipendenza Silverlight in modo simile, anche se richiederà un campo privato per indicare se si sta impostando o ripristinando il valore.