1

假设我在 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} ...它们似乎都没有工作..

任何人都可以帮忙吗?我试图尽可能简化这个例子。希望我的问题足够清楚。提前致谢。

4

3 回答 3

5

最后一个是正确的({Binding Path=BackgroundCol}) - 但是,您不能绑定到字段,您只能绑定到属性。将您的类定义为:

class TimeslotInfo {
    public int TimeslotId {get; set;}
    /* Etc... */
}
于 2009-05-31T18:38:59.597 回答
3

你不仅应该像 Paul 所说的那样使用属性进行绑定,而且通常你应该首先避免使用公共字段

此外,这感觉不应该是一个结构——你真的想要值类型语义吗?如有疑问,您应该默认在 C# 中创建类 - 您真正想要一个结构是非常罕见的。

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

于 2009-05-31T18:42:46.390 回答
0

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

希望这可以帮助!!

于 2009-05-31T18:37:20.427 回答