यह प्रश्न this older एक का अनुवर्ती है, और यह एक खुले प्रश्न की तुलना में अधिक पुष्टि है।एक पदानुक्रमित डेटा संरचना में एमवीवीएम में संपादन जोड़ें
मेरा व्यू मॉडेल उदाहरण मॉडल का एक निजी उदाहरण है, _modelInst
।
व्यूमोडेल के संपादन के दौरान मॉडल के डेटा तक विशेष पहुंच है (इसलिए मॉडल को INotifyPropertyChanged को लागू करने की आवश्यकता नहीं है)।
हो रही है/मॉडल उदाहरण पर सीधे स्थापित करने
उदहारण के लिए:अब तीन तरीकों मैं दृश्य से मॉडल डेटा को संपादित करने के लिए कैसे के साथ आया हैं सरल मान फ़ील्ड
return _modelInst.fieldname;
_modelInst.fieldname = value;
के लिए यह एक के लागू करने में आसान ...एक ViewModel उदाहरण बनाना और माता-पिता के डेटा संरचना पर काम
उदा- उस प्रकार के लिए एक नया ViewModel बनाना: structs की तरह अधिक जटिल वस्तु प्रकार के लिए।
व्यूमोडेल माता-पिता और उसके फील्डनाम को जानता है। - एक ContentControl + DataTemplate
- हो रही/सेटिंग में प्रदर्शित है कि:
पैरामीटर के रूप में FIELDNAME,
भले ही केवल एक ही क्षेत्र बदल गया है पूरे मूल वस्तु को अधिलेखित करने के साथ माता पिता की विधियों के माध्यम से
इसका मतलब यह है कि इन संरचनाओं में से प्रत्येक के लिए माता-पिता द्वारा लागू किया गया एक नया इंटरफ़ेस (
_modelInst
पर काम कर रहे अद्यतन दिनचर्या के साथ)।- उस प्रकार के लिए एक नया ViewModel बनाना: structs की तरह अधिक जटिल वस्तु प्रकार के लिए।
माता पिता की डेटा संरचना का कोई प्रत्यक्ष ज्ञान के साथ ViewModel उदाहरणों बनाना
उदा- कमांड के माध्यम से (की सूची) कक्षाओं माता पिता कक्षाएं
प्रत्येक वर्ग
माता-पिता के लिए अद्यतन निर्देश भेजा जा रहा है के लिए एक नया ViewModel बनाना भीतर
- संदेशों
- प्रतिबिंब के लिए (माता-पिता जानता है कि किस बच्चे को उदाहरण की तुलना करके
फ़ंक्शन कहा जाता है सभी संग्रहीत बच्चों के लिए)
इन सभी के लिए एक बड़ा गड़बड़ को लागू करने, के लिए मॉडल है कि संपादन योग्य है के हर क्षेत्र कार्यों बनाने हैं।
काफी मॉडल के सभी क्षेत्रों जिसका मतलब है ...- कमांड के माध्यम से (की सूची) कक्षाओं माता पिता कक्षाएं
(4.) एक एक सामान्य ViewModel जो अकेले प्रतिबिंब के माध्यम से काम करता है, जहां प्रत्येक subobject अपनी मूल और उसके जानता है बना सकते हैं fieldname (+ सूचकांक, यदि एक सूची में)।
केवल रूट के तर्क मॉडल के साथ हस्तक्षेप करेंगे।
लेकिन उस समाधान को _modelInst
के भीतर किसी फ़ील्ड को पथ स्टोर करने के साधनों की भी आवश्यकता होगी।
क्या यह हासिल करने के लिए कोई अन्य (अधिक सरल) तरीका है?
क्या मैंने एमवीवीएम (फिर से) के सिद्धांतों को गलत समझा?
क्या एमवीवीएम बड़े पदानुक्रमित डेटा संरचनाओं में हेरफेर के लिए अनुकूल है?
एक मॉडल वस्तु के रूप में ग्राहक मानते हुए, एक CustomerViewModel जिसके लिए ICommand वस्तुओं को लागू करता है बनाएँ। फिर, आपका दृश्य इन आईसीओएमएंड वस्तुओं से जुड़ना चाहिए और आप ग्राहक के कमांड पैरामीटर में भेजते हैं (संभवतः आपके दृश्य में कहीं से बाध्यकारी)। –
यह एक फ्लैट संरचना पर अच्छा काम करता है, उदा। ग्राहकों की एक सूची।लेकिन क्या होगा यदि मेरे पास एक जटिल पेड़ पदानुक्रम है, जैसे 'सूची संपर्क' जहां 'संपर्क' 'व्यापार, ग्राहक, निजी' और 'व्यवसाय' के आधारभूत आधार' की सूची '' है ...? –
प्रत्येक मॉडल के लिए एक अलग दृश्य मॉडल, हाँ? व्युत्पन्न कक्षाओं के लिए, आप व्यवसाय के रूप में व्यवसाय व्यवसाय = संपर्क का प्रयास कर सकते हैं; यदि (व्यवसाय! = शून्य) [व्यवसाय से संबंधित सामान] ' –