/ / क्या बिना किसी कोड के शुद्ध MVVM फैशन के बिना Telerik RADGridView का उपयोग किया जा सकता है? - सिल्वरलाइट, एमवीएम, टेलरिक-ग्रिड

क्या टेलरिक RADGridView बिना किसी कोड के शुद्ध एमवीवीएम फैशन में इस्तेमाल किया जा सकता है? - चांदी की रोशनी, एमवीवीएम, टेलरिक-ग्रिड

मैं Telerik का Silverlight RADGridView नियंत्रण का उपयोग कर रहा हूं और इसे एक शुद्ध MVVM फैशन में लागू करने की कोशिश कर रहा हूं। मैं अपने दृश्यमॉडल के लिए "घटनाओं के नियंत्रण के लिए MVVMLight" EventToCommand का उपयोग कर रहा हूं।

विशेष रूप से, मैं AddNewDataItem घटना को संभालने की कोशिश कर रहा हूं।

जबकि MVVMLight का PassEventArgsToCommand काम करता हैठीक है, मेरे द्वारा किए गए परिवर्तनों में से कोई भी ग्रिड नियंत्रण (विशेष रूप से न्यूऑब्जेक्ट पैरामीटर) पर वापस नहीं मिलता है। अगर मैं NewObject को कोड में हेरफेर करता हूं, तो सब कुछ ठीक काम करता है।

किसी को भी यह काम करने में कोई अनुभव है? अभी यह टेलरिक की तरह दिखता है केवल "थोवा" MVVM का समर्थन करता है, जो दुर्भाग्यपूर्ण है।

उत्तर:

जवाब के लिए 2 № 1

कोड के पीछे-पीछे कोड होने का मतलब हैकोड MVVM पैटर्न से प्रस्थान करता है। कोड के पीछे कोड रखना पूरी तरह से वैध है क्योंकि कोड के उद्देश्य से यूआई में हेरफेर किया जाता है और किसी भी समस्या डोमेन डेटा को संदर्भित नहीं किया जाता है। वास्तव में, ViewModel में UI हेरफेर करना गलत होगा।

यह स्पष्ट नहीं है कि आप क्या करने की कोशिश कर रहे हैंपूरा करें, लेकिन यदि आप अपने ViewModel के लिए GridViewRowEditEndedEventArgs का संदर्भ दे रहे हैं, तो वह MVVM पैटर्न से प्रस्थान है क्योंकि ViewModel अब View कार्यान्वयन पर निर्भर है।

MVVM पैटर्न में व्यू "के बारे में" जानता हैViewModel और ViewModel "मॉडल के बारे में जानता है। लेकिन मॉडल ViewModel के बारे में या उसके बारे में निर्भर नहीं है और ViewModel View पर निर्भर नहीं है या नहीं है।

यदि आप एGridViewRowEditEndedEventArgs ViewModel के संदर्भ में समस्या यह है कि यदि / जब आप किसी अन्य नियंत्रण (जैसे RadListBox, Infragistics ग्रिड नियंत्रण, या कुछ भी) में दृश्य बदलते हैं तो आपका Viewodod सही ढंग से कार्य करने के लिए बंद हो जाएगा।

आपका कथन है कि:

Telerik केवल "थोड़े" MVVM का समर्थन करता है

अनुचित और गलत है।

MVVM का लक्ष्य कोड को खत्म करना नहीं हैकोड के पीछे। यह एक सामान्य गलत धारणा है। MVVM के लक्ष्य परीक्षण को बढ़ावा देना और अच्छे "चिंताओं को अलग करने" प्रथाओं के हिस्से के रूप में पीछे से डोमेन और मॉडल तर्क को दूर करना है।

जब कोड-पीछे कोड को बस समथिंग सेल व्यूवोडेल नामक वर्ग में ले जाया जाता है ... तो वह एमवीवीएम नहीं है।


जवाब के लिए 0 № 2

एरिक, मैं MVVMLight के साथ सिल्वरलाइट ग्रिड व्यू कंट्रोल का उपयोग कर रहा हूं और इसे सफलतापूर्वक काम करने के लिए प्राप्त करने में सक्षम हूं।

मुझे लगता है कि आपकी समस्या AddNewDataItem घटना की अधिक समझ हो सकती है। यदि आप के लिए प्रलेखन पर एक नज़र रखना नई प्रविष्टियाँ जोड़ना आप देखेंगे कि

AddNewDataItem को पहले उठाया गया है नई पंक्ति प्रदर्शित होती है। कार्यक्रम में हैंडलर आप उस ऑब्जेक्ट को इनिशियलाइज़ करते हैं को जोड़ना होगा और इसे पास करना होगा GridViewAddingNewEventArgs।

एक बार जब आपके पास आपकी प्रारंभिक वस्तु हो तो आपरोवडिट इवेंट को संभालने और आपके द्वारा किए गए परिवर्तनों को रद्द करने या रद्द करने की आवश्यकता है। फिर से, यदि आप टेलरिक डॉक्यूमेंट पर एक नज़र डालते हैं, तो आप देखेंगे कि आपके पास AddNewDataItem इवेंट में बनाई गई ऑब्जेक्ट तक पहुंच GridViewRowEditEndedEventArgs (e.NewData) के माध्यम से है। इसके अलावा, जब नया आइटम प्रतिबद्ध होता है, तो यह स्वतः ही RadGridView के आइटम में जुड़ जाएगा।