"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تعديل مجموعة يمكن ملاحظتها من سلسلة رسائل غير مرسلة في WPF؟

كيفية تعديل مجموعة يمكن ملاحظتها من سلسلة رسائل غير مرسلة في WPF؟

تم النشر بتاريخ 2024-11-08
تصفح:729

How to Modify an ObservableCollection From a Non-Dispatcher Thread in WPF?

"هذا النوع من CollectionView لا يدعم التغييرات في SourceCollection الخاص به من موضوع مختلف عن مؤشر ترابط المرسل"

وصف المشكلة

منضم DataGrid إلى ObservableCollection التي تم نشرها بشكل غير متزامن، يلقي خطأ يفيد بأن التغييرات على SourceCollection غير مسموح بها من غير المرسل خيط.

الحل

تنشأ المشكلة من تقارب الخيط. يتم إنشاء ObservableCollection في البداية على مؤشر ترابط واجهة المستخدم، مما يجعلها قابلة للوصول فقط من مؤشر ترابط واجهة المستخدم. لتعديله من موضوع مختلف، يجب وضع المفوض على مرسل واجهة المستخدم.

كود ViewModel المحدث

public void Load()
{
    matchList = new List();
    matchList = proxy.GetMatch().ToList();

    foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
    {
        App.Current.Dispatcher.Invoke((Action)delegate
        {
            _matchObsCollection.Add(match);
        });
    }
}
من خلال استدعاء المفوض على مرسل واجهة المستخدم، تتم جدولة الإضافات إلى ObservableCollection على مؤشر ترابط واجهة المستخدم، وحل الاستثناء.

الربط المحسن والتحديث

للربط غير المتزامن ربط DataGrid وتحديثه، فكر في استخدام INotifyPropertyChanged على خصائص ViewModel الخاصة بك واستدعاء المرسل للتحديث عناصر واجهة المستخدم.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3