Frage

Unter der Annahme, ich diese Struktur Definition in C # haben:

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

Und ich habe eine Linq-Abfrage wie folgt:

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
};

Wenn ich die Itemssource-Eigenschaft festgelegt sagen, eine List-Box wie folgt:

lstBox.ItemsSource = TimeSlotsInfo;

Nun, wie kann ich einen Bindungspfad das „BackgroundCol“ Feld aus dem obigen Abfrageergebnis zu verweisen?

Ich habe versucht {Binding Path = TimeSlotInfo.BackgroundCol}, {Binding Path = TimeSlotInfo / BackgroundCol} und schließlich {Binding Path = BackgroundCol} ... keiner von ihnen scheinen zu arbeiten ..

Kann mir jemand helfen? Ich habe versucht, das Beispiel wie möglich zu vereinfachen. Hoffe, dass mein Problem klar genug ist. Vielen Dank im Voraus.

War es hilfreich?

Lösung

Der letzte korrekt ist ({Binding Path = BackgroundCol}) - aber Sie können nicht auf Felder binden, können Sie nur auf Eigenschaften binden. Definieren Sie Ihre Klasse sein:

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

Andere Tipps

Sie sollten nicht nur verwenden, um Eigenschaften für die Bindung, wie Paulus sagt, aber im Allgemeinen sollten Sie vermeiden Öffentlichkeit Felder an erster Stelle.

Darüber hinaus bedeutet dies nicht das Gefühl, dass es eine Struktur sein sollte - tun Sie wirklich Wert-Typ Semantik wollen? Im Zweifelsfall sollten Sie zu dem Erstellen von Klassen in C # Default -. Es ist ziemlich selten, dass Sie wirklich eine Struktur will

Schließlich, auch wenn Sie haben wollen eine Struktur, sollten Sie fast immer structs unveränderlich machen. Sie sind fast sicher, unerwartete Ergebnisse aus wandelbaren structs haben. Es ist alles gut definiert und aus guten Gründen, aber es ist wahrscheinlich nicht das Verhalten, das Sie erwarten. Mutable structs sind böse.

Wenn Sie Ihre Artikel angezeigt werden sollen, was in BackgroundCol gespeichert ist, können Sie einfach das DisplayMemberPath Eigentum auf Ihrer List-Box auf „BackgroundCol“ gesetzt. Wenn dies nicht das, was Sie erreichen wollen, bitte genauer.

Hope, das hilft !!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top