문제

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

다음과 같이 Say A Listbox의 항목 소스 속성을 설정하면 다음과 같이

lstBox.ItemsSource = TimeSlotsInfo;

이제 위의 쿼리 결과에서 "BackgroundCol"필드를 참조 할 바인딩 경로를 어떻게 설정합니까?

{바인딩 경로 = timeslotinfo.backgroundcol}, {바인딩 경로 = timeslotinfo/backgroundcol}, 마지막으로 {binding path = backgroundcol}을 시도했습니다.

누구든지 도울 수 있습니까? 가능한 한 예제를 단순화하려고 노력했습니다. 내 문제가 충분히 분명하기를 바랍니다. 미리 감사드립니다.

도움이 되었습니까?

해결책

마지막은 정확합니다 ({바인딩 경로 = BackgroundCol}) - 필드에 바인딩 할 수 없으며 속성에만 바인딩 할 수 있습니다. 수업을 다음과 같이 정의하십시오.

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

다른 팁

Paul이 말한 것처럼 바인딩을 위해 속성을 사용해야 할뿐만 아니라 일반적으로 공공 분야를 피하십시오 처음에.

또한, 이것은 구조물이어야한다고 생각하지 않습니다. 정말 가치 유형 시맨틱을 원하십니까? 의심스러운 경우 C#에서 클래스 생성을 기본으로해야합니다. 진짜 구조물을 원합니다.

마지막으로, 당신도 했다 구조물을 원한다면, 거의 항상 스트루크를 불변으로 만들어야합니다. 당신은 돌연변이 성 구조에서 예기치 않은 결과를 얻을 수 있다고 거의 확신합니다. 그것은 모두 잘 정의되고 정당한 이유가 있지만, 아마도 당신이 기대하는 행동이 아닐 것입니다. 돌연변이가있는 구조는 사악합니다.

항목이 BackgroundCol에 저장된 내용을 표시하려면 ListBox에서 DisplayMemberPath 속성을 "BackgroundCol"로 설정할 수 있습니다. 이것이 당신이 달성하려는 것이 아니라면 더 구체적으로하십시오.

도움이 되었기를 바랍니다!!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top