سؤال

وإذا كان لدي عقار:

public list<String> names { get; set; }

وكيف يمكنني توليد والتعامل مع الحدث مخصص لحجج اجل يسمى 'onNamesChanged "كلما يحصل على إضافة اسم إلى القائمة؟

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

المحلول

ويجب عليك التحقق من System.ComponentModel.BindingList ، على وجه التحديد ListChanged الحدث .

نصائح أخرى

ومن المرجح

وA BindingList الخيار الأفضل كما فعلت مدمج تعقب التغييرات ومجموعة متنوعة من الأحداث القائمة التي يمكنك استخدامها. فيما يلي مثال تعريض حدث مخصص لإضافة أي توجيه إلى الحدث BindingList.


    class Example
    {
        private BindingList<string> m_names = new BindingList<string>();
        public IEnumerable<string> Names { get { return m_names; } }
        public event AddingNewEventHandler NamesAdded
        {
            add { m_names.AddingNew += value; }
            remove { m_names.AddingNew -= value; }
        }
        public void Add(string name)
        {
            m_names.Add(name);
        }
    }

وبديل واحد لBindingList هو ObservableCollection - في هذه الحالة أنت " د ترغب في الاشتراك معالج الأحداث الخاصة بك إلى CollectionChanged الحدث واطلاق النار الخاصة بك الحدث اعتمادا على العمل.

يظهر

وديفيد Mohundro نهج واحد؛ الخيار الآخر هو أن ترث من مجموعة وتجاوز الأساليب المختلفة:

class Foo {}
class FooCollection : Collection<Foo>
{
    protected override void InsertItem(int index, Foo item)
    {
        // your code...
        base.InsertItem(index, item);
    }
    protected override void SetItem(int index, Foo item)
    {
        // your code...
        base.SetItem(index, item);
    }
    // etc
}

وأخيرا، يمكنك إنشاء قائمة خاصة بك (IList، IList ) من المبادئ الأولى - الكثير من العمل، فائدة تذكر

وربما يكون النهج غير الأرثوذكسي باستخدام إطار اوب مثل PostSharp إلى "نسج" معالج قبل / بعد ما يسمى استرجاع، التي تطلق على الحدث.

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

ونضع في اعتبارنا أنه في حين أخذ قيمة للمقارنة (داخل رمز معالج الخاص بك)، قد تحصل في حلقة لا نهائية (استدعاء استرجاع الممتلكات التي تدعو معالج اوب، الذي يدعو إلى استرجاع وهلم جرا)، لذلك قد تحتاج إلى التفكير في الطبقة التي تحتوي على هذه الخاصية لتحقيق مجال الدعم.

وستحتاج لعدم فضح القائمة مباشرة كخاصية وربما يكون صفك تنفيذ IList أو بعض من هذا القبيل بعد ذلك النار معالج الحدث على طريقة إضافة ().

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