سؤال

في ستاكوفيرفلوو السؤال كيف يمكن أن WPF المحولات المستخدمة في نمط MVVM? تعلمت أن قيمة المحولات لا ينبغي أن تستخدم في نمط MVVM منذ وظائف قيمة تحويل ينبغي التعامل معها من قبل ViewModel نفسها.

وهذا يجعل الشعور.

ولكن أذكر أني قرأت أنه يجب أن لا تعرض XAML العناصر الرأي, ولكن بدلا من ذلك فضح إلا مجموعات من البيانات التي يرى ثم يربط ويعرض باستخدام DataTemplates.

ومع ذلك, محولات تبدو قوية جدا (على سبيل المثالكما أنها تستخدم في MVVM قالب تجريبي, راجع "رسول عينة" بعد تفريغ ذلك) في هذا أنها يمكن تحويل الكائنات إلى كائنات, مثلارسالة الكائنات FlowDocument الأشياء أو الكائنات في رؤية الأشياء ، أو العرف وضع الكائنات في الصور ، إلخ.

حتى إذا ViewModel هو الذهاب الى تأخذ على وظيفة من قيمة تحويل, هو ذاهب إلى فضح XAML عناصر و خصائص مثل StackPanel, الرؤية, اللون, FlowDocument ، وما إلى ذلك ، أليس كذلك ؟

لا أحد يرى أي سبب لماذا ViewModel لا ينبغي أن تعرض هذه الغنية XAML الكائنات قيمة المحولات تفعل ؟

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

المحلول

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

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

نصائح أخرى

لا تنسى أنه يمكنك استخدام DataTemplates أيضا.أستطيع أن أرى بعض الشعور في حفظ ValueConverters من MVVM ، ولكن DataTemplates هي كل شيء عن تحويل الأشياء إلى واجهة المستخدم الرسومية.

ViewModel الخاصة بك يمكن أن يعرض الكائنات الأخرى (مثلا ، متداخلة ViewModels) إلى واجهة المستخدم الرسومية, و يمكن استخدام واجهة المستخدم الرسومية <DataTemplate DataType="{x:Type SubViewModel}">... إلى خريطة تلك الكائنات الرسومية.

لا أحد يرى أي سبب لماذا ViewModel لا ينبغي أن تعرض هذه الغنية XAML الكائنات قيمة المحولات تفعل ؟

الاطلاق, لأنه يقوض جميع أهداف MVVM:

  1. أنت لم تعد وحدة قابلة للاختبار ، على الأقل ليس بسهولة.
  2. لم يعد لديك الفصل بين المنطق (عرض النموذج) و عرض (view).وهكذا المصممين و المطورين لا يمكن بسهولة التعاون.
  3. رمز صيانة أكثر صعوبة لأنك قد خلط المخاوف معا.

إذا رأيت عرض نموذج إعادة نظر ، حتى أني لم تصنف على أنها MVVM.

أعتقد أن فكرة واحدة من mvvm/mvc/mvp.... الخهو عزل واجهة المستخدم الرسومية التعليمات البرمجية إلى ملف واحد/فئة.إذا كنت تفعل هذا يمكنك تغيير بعض واجهة المستخدم الأخرى دون إعادة كتابة كائنات أخرى ؟ أعتقد أنه إذا كنت تمر حول WPF كائنات محددة الجواب هو لا.إنه حكم قيمة عليك أن تجعل لنفسك.

لا يوجد المطلق 100% القاعدة التي تعمل من أجل هذا أو غيرها الكثير من المفاهيم عند مناقشتها دون منظور لماذا المجتمع العقل قد تحول في هذا الاتجاه.ليس هناك 'المفترض' الحقيقة أو العلم في الحكمة التقليدية' بغض النظر عن كيفية جديدة أو مقنعة بل هو في ذلك الوقت.

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

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