60 votes

Comment faire de Resharper résoudre chemin pour CustomBinding MarkupExtension

Je veux créer une certaine étendue de Liaison-Balisage-Extension, qui se comporte comme un normal WPF-Contraignant, mais des choses en plus (utilisation des valeurs par défaut différentes, peut-être ajouter un peu de comportement, etc.). Code ressemble à ceci:

public class CustomBindingExtension : Binding
{
  .. some extra properties and maybe overrides ...
}

Tout fonctionne bien, y compris XAML intellisense, sauf que j'ai juste ne peux pas faire de Resharper résoudre mon de Liaison de Chemin d'accès correctement. I. e.: en utilisant ce code, je peux [Strg]+Clic sur "CurrentText" et Resharper permet de vs2010 accédez au code de la définition de la CurrentText-Propriété.

<UserControl x:Name="uc" ...>
  <TextBox Text="{Binding ViewModel.CurrentText, ElementName=uc}" />
</UserControl>

Mais à l'aide de ma liaison, qui fonctionne correctement au moment de l'exécution, je viens d'obtenir une Infobulle lors du survol 'CurrentText' à me dire qu'il est certain " MME Internes.De la conception.Les métadonnées.ReflectionTypeNode', et pas de navigation par [Ctrl]+Clic.

<UserControl x:Name="uc" ...>
  <TextBox Text="{util:CustomBinding ViewModel.CurrentText, ElementName=uc}" />
</UserControl>

J'ai essayé les choses suivantes:

Dériver de Liaison Dériver de BindingDecoratorBase Laisse-le en dehors de la "Vulgarisation" de suffixe pour mon CustomBinding-classe mettre le Balisage-Extension dans un ensemble distinct Utilisation ConstructorArgumentAttribute Propriété de type chaîne de caractères et le type PropertyPath pour le Chemin d'accès à la Propriété

J'ai également regardé les classes d'origine de Liaison et BindingBase, mais ne pouvait pas trouver plus de différence à mon code. Les idées de ce que devrait aider ici? Ou est-ce juste un traitement spécial de la Liaison-MarkupExtension qui je peut en aucun cas obtenir pour mon propre MarkupExtensions?

Mise à jour le 16.03.2011: Peut aussi être un bug ou d'une carence de Resharper, Jetbrains est d'enquêter sur ce sujet: http://youtrack.jetbrains.net/issue/RSRP-230607

Mise à jour 10.12.2013: pendant ce temps, la fonction semble être de travailler (avec R# 7.1.3, peut-être aussi les versions antérieures), j'utilise en fait la démarche avec les BindingDecoratorBase et je l'aime beaucoup. Peut-être qu'il ne fonctionne que si votre MarkupExtension se termine sur la "Liaison", mais la mienne, donc je suis heureux.

4voto

ControlFlow Points 2939

En fait il n'est pas possible dans les versions actuelles de R# et, malheureusement, il manquera toujours une caractéristique de venir R# 6.1 libération.

Cette fonctionnalité nécessite beaucoup de changements à l'infrastructure, mais il est sur notre liste et certainement sera mis en œuvre dans la R# 7. Semble comme [CustomBindingMarkup] et [BindingPath] ( path paramètre du constructeur et de l' Path de la propriété) attributs sera mis en place.

Nous nous sommes vraiment désolés pour la gêne occasionnée.

1voto

NikoR Points 98

Vous devez accéder à votre tableau de Balisage-Extension, à l'aide de l'espace de noms correct:

<UserControl x:Name="uc" ...
xmlns:ext="clr-ns:YourProjectNamespace">
  <TextBox Text="{ext:CustomBinding ViewModel.CurrentText, ElementName=uc}" />
</UserControl>

Ici est un bel article à propos de la création d'un custom Markup Extensions.

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