كيفية تمرير معلومات EventArgument من العرض لعرض النموذج في WPF؟

StackOverflow https://stackoverflow.com/questions/2486025

سؤال

لديّ تحكم في ListView في طلبي الذي يرتدي مجموعة من CustomObject قائمةCustomObject>. ال CustomObject لديه وجهة نظر منفصلة. هذه القائمة لديها نموذج عرض منفصل.

قائمة التجميع _customObject تحتوي على فئة ListView ViewModel.

استعلامي:

أرغب في استدعاء طريقة عرض تعرض خصائص كائن مخصص ، عند النقر المزدوج على أي صف من ListView. أمر LISTVIEW DUBLE CLICK ListViewDoublClick الأمر في نموذج العرض. CustomObject موجود في وسيطة الحدث لأمر ListView نقر مزدوجًا. لتحقيق هذا ، يجب أن أقوم بتمرير الكائن المخصص (أو خاصية معرف فريدة لكائن مخصص يمكنني من خلالها استرداد الكائن المخصص من المجموعة) كمعلمة أمر.

من فضلك اقترح لي الحل !!

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

المحلول

أسهل طريقة للقيام بذلك هي إضافة معالج حدث النقر المزدوج إلى القائمة. تذكر: MVVM لا يعني عدم وجود رمز في العرض! وهذا يعني أن النظرة تعامل فقط مع المخاوف. يمكنك تقديم وسيطة جيدة حقًا مفادها أن EventArgs ذات معنى فقط للعرض وإذا كنت ترغب في نقلها إلى ViewModel ، فيجب عليك فقط تمرير المعلومات ذات الصلة. إذا كان عليك القيام بشيء مثل استخراج البيانات من eventArgs لتمريرها إلى ViewModel ، فهذا مقبول ومناسب ... وأفضل من تمرير EventArgs إلى أسفل ViewModel ، IMHO.

(أنا متأكد من أنني سأحصل على بعض الخلاف حول هذه النقطة ، ولكن التعامل مع تفاعل واجهة المستخدم هو مصدر قلق للوجه وإذا كان البديل يكتب سلوكًا أو يستخدم إطار عمل للحصول على عنصر تحكم واحد يعمل على صفحة واحدة ، تذكر: Yagni والأنماط ليست دينًا.)

تتيح لك العديد من أطر عمل MVVM القيام بذلك (على الرغم من وجود الكثير من النقاش حول ما إذا كانت فكرة جيدة أم لا). Inparticular ، و MVVM Light Toolkit تمت إضافة هذا منذ فترة قصيرة لدعم السحب والإفلات (إذا كنت أتذكر منشور المدونة بشكل صحيح).

إذا كنت لا تستخدم إطار عمل MVVM ، فقد انتهيت من كتابة سلوك للسماح لي بالقيام بذلك إذا كنت سأفعل نفس الشيء في أماكن متعددة. في هذه الحالة ، عادةً ما أقوم باستخراج المعلومات التي أهتم بها من eventArgs (أي ربما لا تريد حقًا الحدث الكامل ، ولكن ربما تهتم بالبند الذي تم النقر عليه وربما بضع أجزاء أخرى من البيانات).

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