Est-il acceptable d’emprunter des propriétés de dépendance à des classes non liées?

StackOverflow https://stackoverflow.com/questions/227030

  •  03-07-2019
  •  | 
  •  

Question

J'écris une classe qui restitue du contenu dans WPF et je veux donner à l'utilisateur le contrôle du rendu du contenu. Le rendu consiste principalement à tracer des lignes. J'ai donc décidé de consulter la classe System.Windows.Forms.Shapes.Line pour avoir une idée des propriétés à implémenter. Cela m’a amené à implémenter la plupart des propriétés StrokeXXXX , ce qui représente un travail fastidieux, car chacune d’elles nécessite des métadonnées pour affecter le rendu.

Un collègue m'a suggéré d'emprunter " les propriétés de Shape comme ceci:

Shape.StrokeThicknessProperty.AddOwner(typeof(MyType));

Cela semble être une très bonne idée. Je pensais qu'en faisant cela, je perdrais la capacité de définir la contrainte et les rappels de propriété modifiés, mais il semble que la surcharge qui prend un PropertyMetadata le permette. Le seul inconvénient que je puisse voir, c’est que si l’implémentation de Shape change, cela affectera notre classe, mais je ne sais pas à quelle fréquence les interfaces .NET devraient changer de manière significative.

Qu'en penses-tu? S'agit-il d'un raccourci décent pour définir les propriétés lorsqu'une classe connue a le comportement souhaité et une interface stable, ou un moyen sûr de jouer avec le feu alors que vous êtes dans un bain d'essence?

Était-ce utile?

La solution

Il est très sûr et utile d’emprunter des PDD ... Lisez le suite au message du Dr WPF sur le sujet!

Voici quelques-uns des "conseils". il fournit:

  • Vous devez toujours savoir ce que la classe de propriétaire fait avec les biens que vous empruntez.
  • Faites attention aux valeurs par défaut et à l'héritage. Parfois, vous avez besoin d'une propriété bool avec la valeur par défaut true. D'autres fois, vous pouvez souhaiter une valeur par défaut false. Parfois, vous avez besoin d'une propriété qui hérite ... d'autres fois, vous ne voulez pas explicitement l'héritage. (Emprunter une propriété telle que TextElement.FontSize risquerait de gâcher des choses plus basses dans l’arbre.)
  • La classe propriétaire peut parfois définir un PropertyChangedCallback qui gênera votre capacité à utiliser la propriété à votre guise. Sachez toujours ce que la classe de propriétaire fait de la propriété.
  • La classe propriétaire peut fournir une routine de validation pour la propriété qui vous empêche de saisir la valeur que vous souhaitez spécifier. Encore une fois, toujours savoir ce que la classe propriétaire fait avec la propriété. La propriété peut être enregistrée de manière à la rendre coûteuse, telle que FixedPage.Bottom, qui invalide la disposition du parent à chaque fois que la propriété change sur un objet. Parfois, vous voudrez peut-être explicitement ce comportement ... parfois, cela provoquera inutilement des passes de présentation. Encore une fois, sachez toujours ce que la classe de propriétaire fait de la propriété.
  • Si vous utilisez une propriété dans un scénario où le framework lui-même tente de l'utiliser (tel que TextSearch.TextPath sur un ItemsControl), vous risquez de vous retrouver en conflit avec le framework.

Autres conseils

Je continuerais simplement de créer mes propres propriétés de dépendance, personnellement. Ce n'est vraiment pas beaucoup de travail supplémentaire, et alors vous n'avez pas à vous soucier des éventuelles mises en garde.

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