Какое значение должно быть установлено для свойства «Путь привязки»?

StackOverflow https://stackoverflow.com/questions/932599

  •  06-09-2019
  •  | 
  •  

Вопрос

Предполагая, что у меня есть это определение структуры на С#:

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

И у меня есть запрос linq:

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

Если я установлю свойство ItemsSource, скажем, ListBox, как показано ниже:

lstBox.ItemsSource = TimeSlotsInfo;

Теперь, как мне установить путь привязки для ссылки на поле «BackgroundCol» из приведенного выше результата запроса?

Я пробовал {Binding Path=TimeSlotInfo.BackgroundCol}, {Binding Path=TimeSlotInfo/BackgroundCol} и, наконец, {Binding Path=BackgroundCol}... кажется, ни один из них не работает.

Кто-нибудь может помочь?Я постарался максимально упростить пример.Надеюсь, моя проблема достаточно ясна.Заранее спасибо.

Это было полезно?

Решение

Последнее верно ({Binding Path=BackgroundCol}), однако вы не можете привязываться к полям, вы можете привязываться только к свойствам.Определите свой класс:

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

Другие советы

Вы не только должны использовать свойства для привязки, как говорит Пол, но и в целом вы должны избегайте общественных мест в первую очередь.

Кроме того, не похоже, что это должна быть структура — вам действительно нужна семантика типов значений?Если у вас есть сомнения, вам следует по умолчанию создавать классы на C# — это случается довольно редко. Действительно хочу структуру.

Наконец, даже если вы делал Если вам нужна структура, вам почти всегда следует делать структуры неизменяемыми.Вы почти наверняка получите неожиданные результаты от изменяемых структур.Все это четко определено и имеет веские причины, но, вероятно, это не то поведение, которое вы ожидаете.Изменяемые структуры — это зло.

Если вы хотите, чтобы ваши элементы отображали все, что хранится в BackgroundCol, вы можете просто установить для свойства DisplayMemberPath в вашем ListBox значение «BackgroundCol».Если это не то, чего вы пытаетесь достичь, пожалуйста, будьте более конкретны.

Надеюсь это поможет!!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top