سؤال

على افتراض أن لدي تعريف الهيكل في 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
};

إذا قمت بتعيين خاصية Octemsource of Say Listbox على النحو التالي:

lstBox.ItemsSource = TimeSlotsInfo;

الآن، كيف يمكنني تعيين مسار ملزم للإشارة إلى حقل "الخلفية" من نتيجة الاستعلام أعلاه؟

لقد جربت {مسار الربط = timeslotinfo.backgroundcol}، {path binding = timeslotinfo / backgroundcol}، وأخيرا {path binding = backgroundcol} ... لا يبدو أن أي منهم يعملون ..

هل أستطيع مساعدتك؟ لقد حاولت تبسيط المثال قدر الإمكان. آمل أن تكون مشكلتي واضحة بما فيه الكفاية. شكرا مقدما.

هل كانت مفيدة؟

المحلول

آخر واحد صحيح ({path binding = backgroundcol}) - ومع ذلك، لا يمكنك ربط الحقول، يمكنك فقط ربط الخصائص فقط. تحديد صفك ليكون:

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

نصائح أخرى

ليس فقط يجب عليك استخدام خصائص ملزمة كما يقول بولس، ولكن بشكل عام يجب عليك تجنب الحقول العامة في المقام الأول.

بالإضافة إلى ذلك، هذا لا يشعر أنه يجب أن يكون بنية - هل تريد حقا دلالات من نوع القيمة؟ عندما تكون موضع شك، يجب عليك التقصير لإنشاء فصول في C # - من النادر جدا أنك حقا تريد الهيكل.

أخيرا، حتى لو كنت فعل اريد من الهيكل، يجب عليك دائما جعل الهياكل غير قابلة للتغيير. كنت شبه مؤكد أن يكون لديك نتائج غير متوقعة من الهياكل القابلة للتغيير. كل شيء محدد جيدا ولأسباب جيدة، ولكن ربما لا يكون السلوك الذي تتوقعه. الهياكل القابلة للتغيير هي الشر.

إذا كنت ترغب في عرض العناصر الخاصة بك أي شيء مخزن في الخلفية، فيمكنك ضبط خاصية DisplayMemberPath على ListBox الخاص بك إلى "BrofressCol". إذا لم يكن هذا ما تحاول تحقيقه، فالرجاء أن تكون أكثر تحديدا.

أتمنى أن يساعدك هذا!!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top