سؤال

لدي مثيل ObservableCollection منضم إلى مربع قائمة WPF مع قالبين منفصلين للبيانات (واحد للعرض والآخر للتحرير).يحتوي قالب البيانات المراد تحريره على رابط أحادي الاتجاه في مربع النص وزر حفظ.

ما هي التغييرات التي أحتاج إلى إجرائها بحيث عندما أضغط على الزر "حفظ" (بعد وضع عنصر القائمة في وضع التحرير)، فإن القيمة التي أقوم بتغييرها في مربع النص لتحل محل القيمة الموجودة في ObservableCollection (والعرض)؟

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

المحلول

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

اقتباس من مقالة مكتبة MSDN على ObservableCollection

لدعم نقل قيم البيانات بالكامل من كائنات مصدر الربط إلى أهداف الربط ، يجب على كل كائن في مجموعتك يدعم الخصائص المرتبطة تنفيذ آلية إخطار مناسبة تم تغيير خاصية مثل الواجهة غير المتوفرة.

نصائح أخرى

لكي يحدث إشعار التغيير في الارتباط بين عميل مرتبط ومصدر بيانات، يجب أن يكون النوع المرتبط الخاص بك إما:

  • تنفيذ واجهة inotifyPropertyChanged (المفضلة).
  • توفير حدث تغيير لكل خاصية من النوع المربوطة.

لا تفعل كلا الأمرين.

مصدر: شبكة MSDN:واجهة INotifyPropertyChanged

لقد قمت بحل مشكلة مماثلة باستخدام فئة BindingList<T>.

لقد تم إطلاق حدث ListChanged عند تغيير المجموعة والعنصر الفردي.

تم تقديمه في .Net 3.5

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