• 0
VB Helper

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

سؤال

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

من المعروف عند ظهور الاصدار الثاني من تقنية الدوت نت أتى مفهوم ال 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
3

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

8 إجابة على هذا السؤال .

  • 0

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

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

وشكرا لك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

وشكرا لك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .