الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الفرق بين الـ List و الـ ObservableCollection

مثبّت
بدأه VB Helper في 15 يوليو 2011 · 8 رد · 5,493 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

من المعروف عند ظهور الاصدار الثاني من تقنية الدوت نت أتى مفهوم ال Generics والذي اضاف ميزات وحل مشاكل كانت موجودة سابقا في الـ Collections, فبواسطته نقدر عمل هياكل بيانات حسب نوع معين وهذا سيوفر لنا ميزة الفحص اثناء وقت ترجمة البرنامج Compilation Time وسيقوم بإلغاء مشكلة ال Boxing والـ Unboxing الموجدتان سابقا قبل ظهور هذه التقنية, سنقوم في درسنا باستعراض احد انواع ال Collections ألا وهو الـ List ونوضح الفرق بينه وبين المجموعة الجديدة ObservableCollection.

List<T>

هي احد انواع الـ Generic Collection والتي تحتوي قائمة من الكائنات من النوع T حيث أن T هو نوع الكائن, وهذه القائمة يمكن الوصول لعناصرها بإستخدام الدليل. كما توفر اجراءات للبحث والترتيب و ومعالجة العناصر بداخلها. طبعا من المعروف عندما نريد اسناد مجموعة من العناصر ضمن List إلى أداة عرض مثل ال GridView نقوم بتحديدها كمصدر للمعلومات من ثم نطلق الاجراء Bind ليتم ربط البيانات وعرضها على الاداة, ولكن المشكلة اذا تم تحديث البيانات لايتم تحديث الأداة إلا إذا قمنا بنفس العملية السابقة من جديد!! ولكن هذا ليس عملي

فلو قمنا بعمل تطبيق WPF ومن ثم انشائنا الفئة Student على النحو التالي


Public Class Student
Public Property Name As String
Public Property Level As String
Public Property Grade As Integer
End Class

فيتم تعريفها بالصورة التالية


Dim StudentsList As List(Of Student) = New List(Of Student) From
{
New Student() With {.Name = "Peter", .Level = "3rd", .Grade = 4},
New Student() With {.Name = "Dave", .Level = "4th", .Grade = 3},
New Student() With {.Name = "John", .Level = "3rd", .Grade = 1},
New Student() With {.Name = "Samantha", .Level = "2nd", .Grade = 5},
New Student() With {.Name = "Joseph", .Level = "1st", .Grade = 2}
}

ObservableCollection<T>

هي نوع جديد من أنواع الـ Generic Collection والتي توفر خدمة الإشعار بإستخدام الواجهه INotifyCollectionChanged عند إضافة أو حذف أو إنعاش عناصرها. فهي تحل المشكلة السابقة في الـ List حيث إذا أستخدمت كمصدر معلومات وتم تحديث بياناتها يتم تحديث أدوات العرض تلقائيا الأمر الذي يجعل التعامل معها أمرا في غاية السهولة, كما توفر عناء الـ Bind في كل مرة يتم تحديث البيانات فيها, ويتم تعريفها بالصورة التالية


Dim StudentsObservableCollection As ObservableCollection(Of Student) = New ObservableCollection(Of Student) From
{
New Student() With {.Name = "Peter", .Level = "3rd", .Grade = 4},
New Student() With {.Name = "Dave", .Level = "4th", .Grade = 3},
New Student() With {.Name = "John", .Level = "3rd", .Grade = 1},
New Student() With {.Name = "Samantha", .Level = "2nd", .Grade = 5},
New Student() With {.Name = "Joseph", .Level = "1st", .Grade = 2}
}

ولكنها لاتقوم بأي إشعار في حالة تغيير قيمة أي خاصية في المجموعة, لذا نقوم بإستخدام الواجهه INotifyPropertyChanged إذا اضطر الأمر, وفي المثال التالي يوضح كيفية التعامل مع هذه الواجهه


Implements INotifyPropertyChanged

Public Event PropertyChanged(ByVal sender As Object, ByVal e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged

Private Sub onPropertyChanged(ByVal sender As Object, ByVal propertyName As String)
RaiseEvent PropertyChanged(sender, New PropertyChangedEventArgs(propertyName))
End Sub

Private _Name As String
Private _Level As String
Private _Grade As Integer

Public Property Name As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
onPropertyChanged(Me, "Name")
End Set
End Property
Public Property Level As String
Get
Return _Level
End Get
Set(ByVal value As String)
_Level = value
onPropertyChanged(Me, "Level")
End Set
End Property
Public Property Grade As Integer
Get
Return _Grade
End Get
Set(ByVal value As Integer)
_Grade = value
onPropertyChanged(Me, "Grade")
End Set
End Property

End Class
Public Class NotifyStudent

ولقد ارفقت مشروع لتوضيح الفكرة لهذا الدرس

WpfApplication1.zip

تم تعديل هذه المشاركة بواسطة VB Helper في 21 يوليو 2011 في 00:01

3

.:: Wish to become better and better ::.

#2

جزاك الله خيرا أخى الكريم

ولى سؤال أيهما أفضل تطبيقات الويندز المعتادة أم تطبيقات WPF

وشكرا لك

#3

السلام عليكم ورحمة الله وبركاته

اخي الـ Windows Forms هو الأسلوب المعتاد للتعامل مع تطبيقات الويندوز, أما الـ WPF فهي تقنية عرض حاولت مايكروسوفت جمع تقنيات كثيرة سابقة فيها مثل الـ GDI+ , Media Player, DirectX والكثير وهي تستخدم لغة الـ Xaml لوصف واجهات العرض

.:: Wish to become better and better ::.

#4
VB Helper كتب:

السلام عليكم ورحمة الله وبركاته

اخي الـ Windows Forms هو الأسلوب المعتاد للتعامل مع تطبيقات الويندوز, أما الـ WPF فهي تقنية عرض حاولت مايكروسوفت جمع تقنيات كثيرة سابقة فيها مثل الـ GDI+ , Media Player, DirectX والكثير وهي تستخدم لغة الـ Xaml لوصف واجهات العرض

أخى الكريم هل هى تقنية ناجحة ستستمر الشركة فى دعمها أم من الممكن أن تتخلى الشركة عنها

وشكرا لك

#5

السلام عليكم ورحمه الله وبركاته

اخي الـ WPF هي الجيل الجديد من مايكروسوفت لبناء الواجهات!! طبعا ما أريد ان اخوض في تفاصيل هذه التقنية, ولكن نريد ان نركز على الموضوع الاساسي

.:: Wish to become better and better ::.

#6

جزاك الله خيرا .. :)

#7

السلام عليكم ورحمه الله وبركاته

لا شكر على واجب ...

.:: Wish to become better and better ::.

#8

مشكورررررررررررررررررررررر

#9

موضوع مهم جدا ورائغ , جزاك الله خيرا

مواضيع مشابهة