Domanda

Supponendo che ho questa definizione struct in C #:

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

E ho una query LINQ come:

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

Se ho impostato la proprietà ItemsSource di dire una ListBox come di seguito:

lstBox.ItemsSource = TimeSlotsInfo;

Ora, come faccio a impostare un percorso vincolante per fare riferimento al campo "BackgroundCol" dal risultato della query di cui sopra?

Ho provato {Binding Path = TimeSlotInfo.BackgroundCol}, {Binding Path = TimeSlotInfo / BackgroundCol}, e, infine, {Binding Path = BackgroundCol} ... nessuno di loro sembra funzionare ..

Qualcuno può aiutarmi? Ho cercato di semplificare l'esempio possibile. Spero che il mio problema è abbastanza chiara. Grazie in anticipo.

È stato utile?

Soluzione

L'ultimo è corretto ({Binding Path = BackgroundCol}) - tuttavia, non è possibile associare ai campi, è possibile associare solo alle proprietà. Definire la classe di essere:

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

Altri suggerimenti

Non solo si dovrebbe utilizzare le proprietà per il legame come dice Paolo, ma in generale si dovrebbe evitare pubblica campi in primo luogo.

In aggiunta, questo non si sente come dovrebbe essere una struttura - non si vuole veramente il valore di tipo semantica? In caso di dubbio, si dovrebbe di default per la creazione di classi in C # -. È piuttosto raro che si davvero vogliono una struct

Infine, anche se ha vuole una struct, si dovrebbe quasi sempre fare le strutture immutabili. Sei quasi certo di avere risultati inattesi da struct mutevoli. E 'tutto ben definito e per buone ragioni, ma probabilmente non è il comportamento che ci si aspetta. struct Mutevoli sono il male.

Se volete che i vostri elementi da visualizzare tutto ciò che è memorizzato in BackgroundCol, si può semplicemente impostare la proprietà DisplayMemberPath sul ListBox a "BackgroundCol". Se questo non è quello che stai cercando di raggiungere, si prega di essere più specifico.

Spero che questo aiuti !!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top