سؤال

أقوم ببناء تطبيق WPF وأحاول الامتثال لأفضل الممارسات MVVM. أنا أستخدم مؤسسة MVVM الإطار ولاحظ رسول الفصل ، الذي قرأته يجب استخدامه معالجة الحوارات في WPF. هذا يبدو رائعًا ، لكنني لا أفهم تمامًا كيفية استخدام رسول لهذا الغرض. حرفيًا ، كل ما أريد فعله هو فتح وسيط حول مربع الحوار -لا أحتاج إلى تمرير أي رسائل ذهابًا وإيابًا.

هل تم استخدام نية فئة الرسول في الحالات التي تتطلب فيها الحوار رسالة من والدها ، أو إعادة رسالة إلى والديها؟ هل هو مبالغة لحوار حول؟ هل سأكون أفضل حالًا في إضافة رمز إلى معالج حدث لإظهار الحوار؟

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

المحلول

الفكرة وراء نمط المراسلة لا علاقة لها على وجه التحديد بعرض الحوار. تتمثل الفكرة ببساطة في توفير طريقة منفصلة للتواصل بين عوامل العرض.

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

كما أظهر فيليب أعلاه ، يمكنك إرسال رسائل بين ViewModels. عندما يتلقى ViewModel الرسالة ، يمكن أن تقوم بتعيين خاصية داخلية خاصة بها ، على سبيل المثال "showdialog" ، إلى True.

يمكنك بعد ذلك الحصول على ارتباط يتفاعل مع عملية تغيير الخاصية هذه وتفتح مربع حوار.

لقد قمت أيضًا ببناء إطار رسائل بسيط لنمط MVVM الذي يستعير من فكرة Josh (والعديد من الأطر الأخرى الموجودة) التي يمكنك قراءتها عنها هنا

نصائح أخرى

قل أن لديك طريقة عرض للوالدين وعرض مربع حوار. في MVVM سيكون لديهم نموذج عرض. من الجيد أن تبقي نماذج العرض هذه مفصولًا ، أي ليس لديهم إشارات إلى بعضها البعض. ومع ذلك ، يحتاجون إلى التواصل مع بعضهم البعض. تعمل فئة Messenger كخروج بين أو وسيط للتوسط في اتصال المعلومات بين الفئتين. انظر الرمز المأخوذ من مدونة جوش.

alt text

فيما يلي كائن A. إنه يدعو إلى طريقة تسجيل الوسيط: عندما أتلقى رسالة ObjectBoxaIdsomething ، من الوسيط ، سأقوم بتخزينها في العضو WhatoBjectBsays.

alt text

فيما يلي الكائن B ، الذي ينفذ: سأرسل رسالة ObjectBsaIdSomething. لاحظ أن هذا الكائن B لا يعرف شيئًا عن الكائن A. قد لا يكون هناك شيء يستمع إلى ObjectBsaIdsomething ، أو 100 كائن يستمع إلى ObjectBsaIdsomething ، لكن الكائن B لا يعرف ولا يهتم. هذا أمر جيد ، وهذا هو السبب في أن نمط الوسيط فكرة جيدة. وهذه هي الطريقة التي توصي بها مؤسسة MVVM بأن يتم تمرير المعلومات بين نماذج العرض.

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