Transmettez la valeur d'un champ à Silverlight ConverterParameter
Je suis en train d'écrire ma première application Silverlight. J'ai un datagrid avec une colonne qui a deux étiquettes, les étiquettes, je suis en utilisant un IValueConverter conditionnelle, le format des données.
Du label, le "Contenu" est défini comme tel:
Content="{Binding HomeScore, Converter={StaticResource fmtshs}}"
et
Content="{Binding AwayScore, Converter={StaticResource fmtshs}}"
La Convertir méthode de mon IValueConverter est telle:
Public Function Convert(
ByVal value As Object,
ByVal targetType As System.Type,
ByVal parameter As Object,
ByVal culture As System.Globalization.CultureInfo) As Object
Implements System.Windows.Data.IValueConverter.Convert
Dim score As Long = value, other As Long = parameter
Return If(score < 0, "",
If(score - other > 5, (other + 5).ToString, score.ToString)
)
End Function
Donc ce que je veux faire, c'est dans le convertisseur pour HomeScore, je veux passer AwayScore à la ConverterParameter, et pour AwayScore je veux passer la HomeScore pour le convertisseur. Dans le convertisseur soit le score j'ai besoin d'être en mesure de connaître la valeur de l'autre score pour des raisons de formatage.
Mais je ne peux pas comprendre la syntaxe de liaison de la ConverterParameter à un autre champ.
J'ai essayé ce qui suit:
Content="{Binding HomeScore, Converter={StaticResource fmtshs}, ConverterParameter=AwayScore}"
Content="{Binding HomeScore, Converter={StaticResource fmtshs}, ConverterParameter={AwayScore}}"
Content="{Binding HomeScore, Converter={StaticResource fmtshs}, ConverterParameter={Binding AwayScore}}"
Mais aucune de ces semblent fonctionner. Comment puis-je passer une valeur de champ à la ConverterParameter?
source d'informationauteur eidylon
Vous devez vous connecter pour publier un commentaire.
Que vous ne pouvez pas passer n'importe quoi, mais un littéral dans le
ConverterParameter
la solution est de passer l'ensemble de l'objet dans le convertisseur puis vous pouvez accéder à l'ensemble de ses propriétés à partir de l'intérieur du Convertisseur.De sorte que votre code devient (en supposant que votre objet est appelé
Match
):(Toutes mes excuses pour le manque de détail dans le code)
Alors votre XAML devient
NOTE Alors que vous êtes apparemment en se liant directement à la convertisseur, ce n'est pas réellement le cas. Vous liant au contexte de données sans spécifier de
Path
de sorte que vous pouvez accéder à l'ensemble de la chose.Source
Dirait que vous êtes en essayant de se lier à un ConverterParameter qui je crains que vous ne pouvez pas. ConverterParameter ne peut prendre que des valeurs littérales e.g ConverterParameter='Votre texte'
J'ai eu le même problème, et a dû dormir sur elle. Semble que le Convertisseur est "one shot" à l'obtention de données - par le biais de la Liaison de la valeur.
Afin de faire la Liaison de la valeur d'un complexe de classe. Si vous êtes à l'aide de M-V-VM vous devez être données de lissage, de toute façon, j'ai donc fait la Liaison de la valeur "travail difficile" par notamment l'affichage de la valeur et les autres données dont j'ai besoin dans mon convertisseur (créé un contenu de classe si vous voulez).
Ensuite, j'ai besoin d'avoir le Convertisseur de travail plus difficiles, avec sa limitation de passer ConverterParameters comme type de la Valeur des littéraux, j'ai donc créer un Enum dans mon convertisseur, et le jeta littéralement sur elle pour plus d'élégance dans mes Convertir routine.
Ce que je pourrais faire est de varier la couleur (à la Brosse) et de l'épaisseur d'une cellule de la Grille, en fonction de la valeur affichée et une autre valeur de seuil (que je vérifie contre).
Le code source est sur mon site de blog, de son Silverlight 3 du code à l'aide de la liaison dans un pseudo-M-V-VM de la mode (pas d'injection de dépendance, mais bon - c'est un exemple, hein?)
télécharger à l'adresse: http://www.martymazurik.com/file.axd?file=2010%2f6%2fHighlightGridCell.zip.txt
puis retirez le .txt
ChrisF est la seule solution que j'ai été en mesure de venir à l'affectation de l'intégralité de l'objet de données à contenu de la propriété et à l'aide d'un Convertisseur intégré de s'attendre à ce type d'objet d'analyser les propriétés dont vous avez besoin dans le convertisseur lui-même.
Pas totalement sûr de comprendre votre problème, mais je pense que vous êtes à la recherche pour la liaison avec "elementname"?
ex: http://www.wintellect.com/CS/blogs/jprosise/archive/2009/03/27/silverlight-3-s-new-element-data-binding.aspx
Si vous souhaitez relier le convertisseur paramètre, jetez un oeil à ceci: http://brandontruong.blogspot.com/2009/06/binding-for-converter-parameter.html Il ne peut pas être la solution la plus propre, mais elle est simple et peut être utile dans certaines situations