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?

È stato utile?

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:

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top