MarkupExtension avec les paramètres de liaison
Je suis en train de travailler sur un Custom MarkupExtension dans lequel j'ai besoin d'un non les paramètres de chaîne de XAML pour construire le nouvel objet. Est-il possible d'utiliser un non-paramètre de chaîne de liaison sur un champ dans le datacontext de la portée?
En d'autres termes, comment puis-je faire quelque chose comme cela?
<ListBox ItemsSource="{Binding Source={local:MyMarkupExtension {x:Type Button},IncludeMethods={Binding Source=CustomerObject.IsProblematic}}}" />
où IncludeMethods=CustomerObject.IsProblematic
donne-moi de cette erreur:Liaison ne peut pas être réglé sur " IncludeMethods propriété de type 'TypeDescriptorExtension'. Un "Liant" ne peut être réglé que sur une DependencyProperty de DependencyObject.
Quelqu'un peut m'aider?
grâce
OriginalL'auteur user1351709 | 2012-04-26
Vous devez vous connecter pour publier un commentaire.
Un "Liant" ne peut être réglé que sur une DependencyProperty de DependencyObject - c'est vrai. Le problème est que
MarkupExtension
classe ne provient pas de l'DependencyObject
, c'est pourquoi il n'est pas possible de définir de liaison sur ses propriétés.[MODIFIER]
Solution de contournement est d'utiliser ValueConverters. Une autre solution est de changer de langage C# pour permettre l'héritage multiple. Par ailleurs, dans Silverlight
MarkupExtension
implémenteIMarkupExtension
interface, j'ai donc essayé de l'implémenter dans mon extension personnalisée et calculer à partir duDependecyObject
, a ajoutéDependencyProperty
là-bas la liaison. Il ne plante pas, mais la liaison est en fait défini après ProvideValue() est appelée. Ainsi, même dans Silverlight il n'y a pas de solution (ou il est difficile, voir le lien fourni dans Klaus78 réponse). Dans WPF MarkupExtension n'implémente pas l'interface, de sorte que vous ne peut pas se lier à ses propriétés.veuillez voir mon edit
Changer le langage C# pour permettre l'héritage multiple n'est pas exactement ce que j'appellerais une "solution de contournement" 😉
Changer le langage C# serait les solutions les plus élégantes de l'OMI. Vous pouvez trouver le code source de la .Net Framework ici: github.com/dotnet (il y a plusieurs référentiels). Je pense que vous devez éditer le CLR qui peut être trouvé ici github.com/dotnet/coreclr
Calme, sarcastique et a fait ma journée! 😀 Youpi, nous allons tous fourchette .NET framework.....
OriginalL'auteur EvAlex
Ce lien instructif sur
Personnalisé Extension de Balisage avec des propriétés qui peuvent être liées
MODIFIER
Quelqu'un m'a noter que cela ne fonctionne que pour Silverlight, parce que dans WPF MarkupExtension ne pas mettre en œuvre IMarkupExtension interface. (Merci EvAlex)
Fonctionne également dans Xamarin Forms. Youpi, enfin trouvé une fonction qui Xamarin Forms est en avance de WPF 😛
OriginalL'auteur Klaus78
J'ai trouvé une solution de contournement pour ce problème.
L'idée principale est de définir la propriété jointe pour chaque paramètre, ce qui nécessite une liaison.
Utilisation est des plus simples:
ne semble pas fonctionner; param1Value est toujours null
OriginalL'auteur nicolay.anykienko