Какое свойство Binding Path должно быть установлено? - PullRequest
1 голос
/ 31 мая 2009

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

    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} ... кажется, что ни один из них не работает ..

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

Ответы [ 3 ]

5 голосов
/ 31 мая 2009

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

class TimeslotInfo {
    public int TimeslotId {get; set;}
    /* Etc... */
}
3 голосов
/ 31 мая 2009

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

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

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

0 голосов
/ 31 мая 2009

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

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

...