Pergunta

Supondo que eu tenho esta definição struct em C #:

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

E eu tenho uma consulta linq como assim:

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 eu definir a propriedade ItemsSource de dizer um ListBox como abaixo:

lstBox.ItemsSource = TimeSlotsInfo;

Agora, como faço para definir um caminho de ligação para fazer referência ao campo "BackgroundCol" a partir do resultado da consulta acima?

Eu tentei {Binding Path = TimeSlotInfo.BackgroundCol}, {Binding Path = TimeSlotInfo / BackgroundCol} e, finalmente {Binding Path = BackgroundCol} ... nenhum deles parece estar funcionando ..

alguém pode ajudar? Eu tentei simplificar o exemplo possível. Espero que o meu problema é o suficiente clara. Agradecemos antecipadamente.

Foi útil?

Solução

A última é correto ({Binding Path = BackgroundCol}) - no entanto, você não pode vincular a campos, você só pode vincular a Propriedades. Defina sua classe a ser:

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

Outras dicas

Não só você deve usar as propriedades para a ligação como diz Paulo, mas em geral você deve público evite campos em primeiro lugar.

Além disso, este não se sente como ele deve ser um struct - você realmente quer a semântica do tipo de valor? Em caso de dúvida, você deve usar como padrão para a criação de classes em C # -. É muito raro que você realmente quer um struct

Finalmente, mesmo se você se quer um struct, você deve quase sempre fazer estruturas imutáveis. Você está quase certo de ter resultados inesperados de estruturas mutáveis. Está tudo bem definida e por boas razões, mas provavelmente não é o comportamento que você espera. estruturas mutáveis ??são maus.

Se você quiser que seus itens a serem exibidos tudo o que está armazenado em BackgroundCol, você pode apenas definir a propriedade DisplayMemberPath em sua caixa de listagem para "BackgroundCol". Se isto não é o que você está tentando alcançar, por favor, ser mais específico.

Espero que isso ajude !!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top