12
votes

Valeur passe d'un champ sur Silverlight ConverterParameter

J'écris ma toute première application Silverlight. J'ai un datagrid avec une colonne qui possède deux étiquettes, pour les étiquettes, j'utilise un ivenueconverter pour formater conditionnellement les données.

Le "contenu" de l'étiquette est défini comme tel: xxx

et xxx

le convert < / Strong> La méthode de mon ishandeConverter est telle: xxx

donc ce que je veux faire est dans le convertisseur pour Homescore, je veux passer l'écran sur le converterParamètre et pour l'éloignement Je veux passer le foulescore au convertisseur. Dans le convertisseur pour l'un ou l'autre score, j'ai besoin de connaître la valeur de l'autre score à des fins de mise en forme.

mais je ne peux pas comprendre la syntaxe pour lier le converterparameter dans un autre champ.
J'ai essayé ce qui suit: xxx

mais aucun de ceux qui ne semblent fonctionner. Comment passer une valeur de champ au converterParameter?


2 commentaires

J'ai essayé les citations simples mais dans le convertisseur, cela me donne une chaîne de '{contraignant quelque autre point de vue}'. Ai-je manqué quelque chose? :( PS. J'utilise Silverlight 3.


Regardez les convertisseurs multibinds Stackoverflow.com/questions/377841/...


6 Réponses :


0
votes

Pas totalement sûr que je comprends votre problème mais je pense que vous recherchez une liaison avec "ElementName"?

ex: http://www.wintellect.com/cs/blogs/jprosise/archive/2009/03/27/silverlight-3-s-new-element-data-binding.aspx


0 commentaires

6
votes

On dirait que vous essayez de lier à un converterparameter que je crains que vous ne puissiez pas. ConverterParameter ne peut prendre que des valeurs littérales E.G converterParameter = 'votre chaîne'


2 commentaires

Oui, c'était exactement ce que j'essayais de faire.


Si vous ne l'avez pas encore compris, les citations simples sont ce qui vous manque dans votre code de question.



2
votes

J'ai eu le même problème et j'ai dû dormir dessus. Semble que le convertisseur devient "un coup" pour obtenir les données - à travers la valeur de liaison.

Donc, rendez la valeur de liaison à une classe complexe. Si vous utilisez MV-VM, vous devez être en forme de données, de toute façon, j'ai donc rendu la valeur de liaison «Travailler plus difficile» en incluant la valeur d'affichage et les autres données dont j'avais besoin dans mon convertisseur (créé une classe contenue si vous voulez).

Ensuite, j'avais besoin d'avoir le convertisseur «travailler plus fort», avec sa limitation de la converterAramètres de passage en tant que littérales de valeur, donc je crée une énumération dans mon convertisseur et je jette le littéral sur celui-ci pour plus d'élégance dans ma routine de conversion.

Ce que je pouvais faire, il varie alors la couleur (brosse) et l'épaisseur d'une cellule de 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, son code Silverlight 3 à l'aide de la liaison dans une mode pseudo M-VM (aucune injection de dépendance, mais hey - c'est un exemple, non?)

Télécharger à: http: // www. martymazurik.com/file.axd?file=2010%2f6%2fhighlightgridcell.zip.txt

Ensuite, retirez le .txt


1 commentaires

Je pense que c'est la meilleure approche jusqu'à présent. Il déléguette la responsabilité de la complexité dans l'objet où il appartient +1



7
votes

Comme vous ne pouvez rien transmettre, mais un littéral dans le ConverterterRamètre Code> La solution consiste à transmettre l'objet entier dans le convertisseur, puis vous pouvez accéder à toutes les propriétés de son convertisseur.

Donc, votre code devient (supposer que votre objet est appelé correspondant code>): p> xxx pré>

(excuses pour manque de détails dans le code) P>

Ensuite, votre XAML devient P>

Content="{Binding Converter={StaticResource fmtshs}}"


3 commentaires

Le problème avec cela est que si une propriété de l'objet est mise à jour, la valeurConverter ne tire pas


Juste pour plus de clarté: @ChRisf, vous n'êtes pas contraignant au convertisseur, comme vous l'avez mentionné dans votre note. Vous liez le DataContext actuel (comme chemin), à l'aide du convertisseur donné. La liaison au convertisseur est absurde.


@ Dercsár - En effet. C'était sténographique qui rétrospect est confus.



2
votes

CHRISFS a la seule solution que j'ai pu venir à la liaison de l'objet de données complète à la propriété Contenu et à l'aide d'un convertisseur conçu pour attendre ce type d'objet analyser les propriétés dont vous avez besoin dans le convertisseur lui-même.

<sdk:DataGridTextColumn Header="Report Name" Binding="{Binding Mode=OneTime, Converter={StaticResource ReportNameDateQuarterConverter}}" />


/// <summary>
/// Gets Exposure Report Name Quarter Number formatted from Report.Date and Report.Name
/// </summary>
public class ReportNameDateQuarterConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string qStr = "Quarter ";
        if (value != null && value.GetType() == typeof(Report))
        {
            switch (((Report)value).Date.Month)
            {
                case 1:
                case 2:
                case 3:
                    return qStr + "1 " + ((Report)value).Name;
                case 4: 
                case 5:
                case 6:
                    return qStr + "2 " + ((Report)value).Name;
                case 7:
                case 8:
                case 9:
                    return qStr + "3 " + ((Report)value).Name;
                case 10:
                case 11:
                case 12:
                    return qStr + "4 " + ((Report)value).Name;
                default:
                    return qStr + "? " + ((Report)value).Name;

            }
        }
        return qStr + "? " + ((Report)value).Name;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}


0 commentaires

0
votes

Si vous souhaitez lier le paramètre convertisseur, consultez ceci: http://brandontrug.blogspot.com/2009/06/binding-for-converter-parameter.html Ce n'est peut-être pas la solution la plus propre, mais c'est simple et peut être utile dans certaines situations


0 commentaires