سؤال

لقد كنت أتجول مع نمط MVVM والآن أحاول تنفيذ تطبيق صغير بناءً على ذلك.

يحتوي هذا التطبيق على بيانات البيانات التي يتم فيها تقديم بعض البيانات بشكل مدهش. الآن أحاول إضافة بعض قدرة التجميع على ذلك. أعرف كيفية كتابة هذا في الكود (C# و XAML) ، لكنني أتساءل في الطبقة التي يجب أن أضع الرمز المسؤول.

يخبرني جزء واحد مني أنه يجب أن يكون في الرأي ، لأنه رمز خاصة لهذا العرض المحدد. إنه ليس عامًا ويخدم Purpos واحد: لتجميع البيانات.

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

أي ligt يمكن إلقاؤها على هذا؟

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

المحلول

في معظم تطبيقات MVVM ، أحاول تقسيم المسؤوليات مثل هذا:

  • يجب أن تنفيذ العرض مجرد ترجمة بسيطة لبيانات ViewModel إلى وحدات البكسل. عادة ما ينتج عن هذا في الغالب xaml والرمز القليل جدا وراء.
  • يجب أن يقوم ViewModel بإجراء منطق خاص بالمنظر مثل التجميع وما إلى ذلك. غالبًا ما يكون لديّ عدة عروض عرض لكل عرض. يمكن أن يكون لديك نموذج عرض رئيسي يعرض قائمة من عوامل العرض الفرعية لكل مجموعة على وجهة نظرك على سبيل المثال لتنفيذ التجميع.
  • إذا كان لديك أي منطق ينطبق على أكثر من واحد ViewModel ، فمن المحتمل أن يكون منطق المجال ويجب أن يذهب إلى نموذج المجال.

لذلك أعتقد أن التجميع يجب أن يذهب في ViewModel.

نصائح أخرى

لا يوجد أحد إجابة على هذا. يعتمد الأمر حقًا على السيناريو الخاص بك:

1) هل يكون للمستخدم أي تأثير على الأمر؟ إذا لم يفعلوا ذلك ، وكانت مجموعة ثابتة ، فسوف أقوم بنشر خاصية مع iGrouping واستخدام DataService أو LINQ للقيام بذلك قبل دخول العرض.

عادة ما يكون أداءً أقل إذا قمت بالتجميع في العرض ، لكنه ليس خيارًا واضحًا. إذا تمكن المستخدم من تحديد الكثير من المجموعات المختلفة ، فقد يكون هذا عقوبة تستحق الدفع مقابل قابلية الاستخدام المضافة ..

إذا كان للمستخدم بعض التأثير على التجميع ، فسأربطك بـ icollectionview المكشوف من قبل ViewModel. تدعم العرض التجميع والتصفية والفرز والعملة وواجهة ICollectionView من System.componentModel حتى لا تضطر إلى إضافة مرجع "واجهة المستخدم الرسومية" إلى مشروع ViewModel الخاص بك. كما يدعم DataGrid WPF واجهة ICollectionView.

إذا لم يكن للمستخدم أي تأثير على التجميع (تم إصلاح المجموعات) ، فسأقوم فقط "بتجميع البيانات في النموذج". HTH.

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