10 votes

Comment désenregistrer une propriété de dépendance WPF ?

Je rencontre un problème inhabituel dans mes tests unitaires. La classe que je teste crée une propriété de dépendance dynamiquement à l'exécution et le type de cette propriété de dépendance peut varier selon les circonstances. En écrivant mes tests unitaires, je dois créer la propriété de dépendance avec différents types et cela conduit à des erreurs parce que vous ne pouvez pas redéfinir une propriété de dépendance existante.

Existe-t-il un moyen d'annuler l'enregistrement d'une propriété de dépendance ou de modifier le type d'une propriété de dépendance existante ?

Gracias.


OverrideMetadata() ne permet de modifier que très peu de choses, comme la valeur par défaut, et n'est donc pas utile. L'approche AppDomain est une bonne idée et pourrait fonctionner, mais elle semble plus compliquée que ce que je voulais vraiment approfondir dans l'intérêt des tests unitaires.

Je n'ai jamais trouvé de moyen de désenregistrer une propriété de dépendance, j'ai donc renoncé et j'ai soigneusement réorganisé mes tests unitaires pour éviter ce problème. J'ai un peu moins de couverture de test, mais comme ce problème ne se produirait jamais dans une application réelle et seulement pendant les tests unitaires, je peux m'en accommoder.

Merci pour votre aide !

0voto

Davy Points 31

J'ai eu un problème avec un ContentPresenter avec différents Datatemplates où l'un d'entre eux avait une DependencyProperty avec un PropertyChangedCallback. Lorsque l'on change le contenu du ContentPresenter pour un autre DataTemplate, le callback demeure.

Dans l'événement UserControls Unloaded, j'ai appelé :

BindingOperations.ClearAllBindings(this);
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new DispatcherOperationCallback(delegate { return null; }), null);

Cela a fonctionné pour moi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X