معالجات الأحداث C # مخصصة
-
03-07-2019 - |
سؤال
وإذا كان لدي عقار:
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 أو بعض من هذا القبيل بعد ذلك النار معالج الحدث على طريقة إضافة ().