سؤال

من المحتمل أن يكون هذا واضحًا ولكن لا يمكنني العثور على أفضل طريقة.

أرغب في إظهار TODO الخاص بالمستخدم في صندوق القائمة. هذه toDo موجودة في قاعدة البيانات وتتألف من معرف ، معرف المستخدم والوصف.

قام المستخدم بتسجيل الدخول إلى التطبيق.

كيف يمكنني استرداد TODO لهذا المعرف المستخدم الخاص بذلك وإعداده للربط بـ Listbox؟

كنت أحاول مع ObjectDataprovider ، لكن لا يمكنني معرفة كيفية استخدام ذلك مع الأشياء غير المستقلة (مثل خدمة _dbservice ، معمل المستخدم ، اللغة ، ...).

هل الخيارات الوحيدة لجعل كل هذه الأشياء ثابتة مقابل الربط في الكود وراء؟

إذا كان الأمر كذلك ، فهذا يعني أن ObjectDataprovider ليس مفيدًا جدًا ، أليس كذلك؟ أجد الكثير من الأمثلة على استخدامه مع معلمة متشددين ، لكنني بالكاد أرى أي موقف أحتاج إليه مثل هذه الوظيفة ..

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

المحلول

أفعل كل ما عندي من WPF باستخدام طراز-فيرو-فيل نمط. لقد أعطيتك رابطًا واحدًا هناك ولكن Google ستمنحك الكثير. يبدو أن MVVM هو النمط القياسي لـ WPF. هذا المشروع ربما يكون أكثر تعقيدًا مما تحتاجه ، لكنه مكتوب جيدًا ويجلب استخدام MVVM إلى المنزل.

في الأساس ، يمكنك إنشاء نموذج لبياناتك. في هذه الحالة ، من المحتمل أن تقوم بإنشاء فئة بسيطة (سأسميها ToDoItem) مع معرف الخصائص ومعرف المستخدم والوصف. استخدم آليتك المفضلة للحصول على مجموعة من هذه من قاعدة البيانات. ارتباط بـ SQL ، إطار الكيان ، استعلام قياسي ، أيا كان.

ثم لديك ViewModel - لديك مثيل من ViewModel لكل مثيل من النموذج: لدى VM إشارة إلى خصائص M و "Forward". ViewModel هو ما تستخدمه لمعالجة النموذج.

ثم لديك عرضك - هذا هو واجهة المستخدم. قمت بتعيين dataContext من العرض ليكون ViewModel ثم ترتبط ارتباطاتك تلقائيًا بـ ViewModel. وجهة نظرك ينتهي بها الأمر إلى أن تكون الأشياء التي يمكنك رؤيتها. يتم تنفيذ كل العمل في ViewModel. هذا يعني أنه من السهل جدًا اختباره.

لذلك ، عند النقر فوق زر في عرضك ، تمرر الارتباطات هذا إلى أمر في ViewModel الذي يعالج النموذج.

واجهة المستخدم هي أيضًا عرض مع ViewModel. لذلك ، قد تقوم واجهة المستخدم VM بتحميل مجموعة من النماذج من قاعدة البيانات وتثبيتها في ObservableCollection. ستكون مجموعة عناصر ListBox مرتبطة بهذا ObservableCollection.

من الصعب شرح كل هذا في منشور مثل هذا. اقرأ بضع مقالات وشاهد ما هو رأيك. ما زلت جديدًا في هذا أيضًا ، لكنني أعتقد أن قراءتي حول MVVM قد أثمرت.

نصائح أخرى

هيلا توماس ، توم هنا من مدار واحد :)

MVVM هو الطريق للذهاب. أنا في مشروعي الرابع و WPF يضيء حقًا إذا كنت تستخدم MVVM. لقد جربت بالفعل MVC (أو MVP كما فعلنا على الإطارات RECY*) وهذا فصل جميل للقلق. يأخذ MVVM خطوة إلى الأمام لأن ViewModel لا يعرف شيئًا على الإطلاق عن العرض.

يرتبط العرض بـ ViewModel ، بحيث يكون له إشارة إلى ذلك (طريقتين ، قوي للغاية ويعمل خارج العرض التجريبي النموذجي). ViewModel هو مجرد poco وهو تمثيل لعرضك ، البيانات + السلوك. بمجرد حفر هذه الفقرة ، لن يكون لدى MVVM المصطلح الرائع أي أسرار.

أرى ما إذا كان بإمكاني التوصل إلى عرض تجريبي صغير. ربما سيكون لدي وقت لاحق. ما سأتوصل إليه هو عرض (XAML ، الملف 1) يرتبط بـ ViewModel (ملف 2 ، فئة POCO ، لا تخطئ برمز خلف). يمكن أن يكون النموذج ما تريد (طبقة الخدمة أو مباشرة إلى المستودعات). باستخدام قوة الربط 2 ، سنرتبط بمجموعة يمكن ملاحظتها تعني أنه إذا أضفنا/حذف/... شيء للمجموعة ، فإن العرض سيستلمها دون وضع الطاقة فيه.

تم إجراء أول مشروعين لـ WPF الخاص بي باستخدام Caliburn Micro (انظر CodePlex) وهو إطار قوي يعتمد على الاتفاقيات. إنه يرفعك بعيدًا عن WPF المتشددين (إنشاء خصائص التبعية للجولة بنفسك بشكل أساسي) ويمكنك إنشاء شيء سريع نسبيًا دون فهم WPF تمامًا. هذا جانب سلبي بحد ذاته لكنه نجح بالنسبة لي. اعتبارًا من المشروع 3 ، بدأت في ترويض خصائص التبعية هذه بنفسي وسيجعلك مطور WPF أفضل.

أرى السؤال من أكتوبر .. هل وجدت حلًا جيدًا؟

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