Question

En supposant que j'ai cette définition struct en C #:

    public struct TimeSlotInfo
    {
        public int TimeSlotID;
        public int StartMin;
        public int CalcGridColumn;
        public string BackgroundCol;
        public bool ToDisable;
    }

Et j'ai une requête LINQ comme ceci:

var TimeSlotsInfo = 
from ts in datacon.TimeSlots
select new TimeSlotInfo
{
    TimeSlotID = ts.TimeSlotID,
    StartMin = ts.StartMin,
    CalcGridColumn = CalcTimeSlotGridColumn(ts.StartMin),
    BackgroundCol = ts.ColorName,
    ToDisable = false
};

comme ci-dessous Si je mets la propriété ItemsSource de dire ListBox:

lstBox.ItemsSource = TimeSlotsInfo;

Maintenant, comment puis-je configurer un chemin de liaison pour référencer le champ « BackgroundCol » du résultat de la requête ci-dessus?

J'ai essayé {Binding Path = TimeSlotInfo.BackgroundCol}, {Binding Path = TimeSlotInfo / BackgroundCol}, et enfin {Binding Path = BackgroundCol} ... aucun d'entre eux semblent travailler ..

Quelqu'un peut-il aider? J'ai essayé de simplifier l'exemple que possible. Espérons que mon problème est assez clair. Merci à l'avance.

Était-ce utile?

La solution

Le dernier est correct ({Binding Path = BackgroundCol}) - cependant, vous ne pouvez pas lier à des champs, vous ne pouvez lier aux propriétés. Définissez votre classe pour être:

class TimeslotInfo {
    public int TimeslotId {get; set;}
    /* Etc... */
}

Autres conseils

Non seulement si vous utiliser les propriétés pour la liaison comme Paul le dit, mais en général, vous devez éviter publique champs en premier lieu.

De plus, cela ne se sent pas comme il devrait être un struct - voulez-vous vraiment la sémantique de type valeur? En cas de doute, vous devez créer des classes par défaut en C # -. Il est assez rare que vous vraiment veulent un struct

Enfin, même si vous ne veulent un struct, vous devriez faire presque toujours struct immuable. Vous êtes presque certain d'avoir des résultats inattendus de struct mutables. C'est bien défini et pour de bonnes raisons, mais il est probablement pas le comportement que vous attendez. struct mutables sont mauvais.

Si vous voulez que vos éléments à afficher tout ce qui est stocké dans BackgroundCol, vous pouvez simplement définir la propriété DisplayMemberPath sur votre ListBox à « BackgroundCol ». Si ce n'est pas ce que vous essayez d'atteindre, s'il vous plaît être plus précis.

Hope this helps !!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top