Question

Par exemple, j'ai une propriété de dépendance qui modifie le ScaleTransform d'un canevas, mais si elle passe au-dessous de zéro, une erreur est renvoyée. Bien sûr, je pourrais simplement le forcer à zéro dans le code si cela se produit, mais je préférerais utiliser une meilleure méthode, comme utiliser un udouble (double non signé), qui n'existe pas dans Silverlight ou même définir les valeurs min / max. quelque part dans DependencyProperty.

Quelle est la meilleure approche ici?

Était-ce utile?

La solution

Si vous envisagez de gérer cela dans votre DependencyProperty, je vous recommande de le gérer de manière PropertyChangedCallback , qui valide que la valeur est dans la plage correcte et la remplace sinon.

Vous pouvez également gérer cela en dehors de la propriété de dépendance. Par exemple:

Autres conseils

Pour ajouter à cela, à l'intérieur de votre PropertyChangedCallback, un modèle typique va revenir sur des valeurs incorrectes / hors de la plage, avant de lever une exception.

Si vous n'effectuez pas cette opération, la valeur hors limites sera toujours définie et votre état ne sera pas valide.

Vous verrez des exemples de ce "coercien du pauvre". dans certains des outils Silverlight. Voici la source AutoCompleteBox.cs .

Le motif ressemble à quelque chose comme:

   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");
        }

Vous pouvez également implémenter votre propre " lecture seule " Les propriétés de dépendance Silverlight sont similaires, mais un champ privé sera nécessaire pour indiquer si vous définissez ou inversez la valeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top