Binding Path属性应该设置为什么?

时间:2009-05-31 18:32:22

标签: wpf binding path itemssource

假设我在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
};

如果我设置了ListBox的ItemsSource属性,如下所示:

lstBox.ItemsSource = TimeSlotsInfo;

现在,如何设置绑定路径以引用上述查询结果中的“BackgroundCol”字段?

我尝试了{Binding Path = TimeSlotInfo.BackgroundCol},{Binding Path = TimeSlotInfo / BackgroundCol},最后{Binding Path = BackgroundCol} ...它们似乎都没有工作..

有人可以帮忙吗?我试图尽可能地简化示例。希望我的问题很清楚。 提前谢谢。

3 个答案:

答案 0 :(得分:5)

最后一个是正确的({Binding Path = BackgroundCol}) - 但是,您无法绑定到字段,您只能绑定到Properties。将您的班级定义为:

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

答案 1 :(得分:3)

保罗说,你不仅应该使用绑定属性,而且一般来说你应该avoid public fields

另外,这并不觉得它应该是一个结构 - 你真的想要值类型语义吗?如果有疑问,你应该默认使用C#创建类 - 你真的想要一个结构很少见。

最后,即使你 想要一个结构,你也应该总是使结构不可变。你几乎肯定会有来自可变结构的意外结果。这一切都很明确,并且有充分的理由,但这可能不是您期望的行为。可变结构是邪恶的。

答案 2 :(得分:0)

如果希望项目显示存储在BackgroundCol中的内容,可以将ListBox上的DisplayMemberPath属性设置为“BackgroundCol”。如果这不是您想要实现的目标,请更具体。

希望这会有所帮助!!