假设我在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} ...它们似乎都没有工作..
有人可以帮忙吗?我试图尽可能地简化示例。希望我的问题很清楚。 提前谢谢。
答案 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”。如果这不是您想要实现的目标,请更具体。
希望这会有所帮助!!